【问题标题】:regex for unicode with markdown [[WikiLinks]]带有降价的 unicode 正则表达式 [[WikiLinks]]
【发布时间】:2014-12-08 07:18:00
【问题描述】:

我正在尝试扩展 JS 降价脚本以在文本被日本文本的双方括号(又名维基链接)包围时自动添加链接。现在我有三个问题:)

当我找到 unicode 时,正则表达式结果似乎没有给我 $1 类型的匹配元素

raw = "I [[carried-out]] the [[plan]]"
regex = /\[\[(\w*-*\w*)+\]\]/gm
s2 = raw.replace( regex, "<a class='link' href='/links/$1'>$1</a>" )
console.log("raw:", raw)
console.log("s2 :", s2)

#> raw: I [[carried-out]] the [[plan]]
#> s2 : I <a class='link' href='/links/carried-out'>carried-out</a> the <a class='link' href='/links/plan'>plan</a>


raw = "I [[ひらがな]] the plan [[edit]]"
regex = /\[\[[\u3040-\u309F]+\]\]/gm
s2 = raw.replace( regex, "<a class='link' href='/links/$1'>$1</a>" )
console.log("raw:", raw)
console.log("s2 :", s2)

#> raw: I [[ひらがな]] the plan [[edit]]
#> s2 : I <a class='link' href='/links/$1'>$1</a> the plan [[edit]]

正如您在第二种情况下看到的,“$1”没有被插值,即使正则表达式操作几乎相同?

内部匹配器略有不同:

regex = /\[\[(\u3040-\u309F)+\]\]/gm     # matches but no interpolation
regex = /\[\[[\u3040-\u309F]+\]\]/gm     # fails to match

[] 和 () 在比赛中的区别,我不是很清楚:

(\u3040-\u309F)+
[\u3040-\u309F]+

是否存在与 unicode 相关的已知问题?否则,如果有人可以帮助我解决问题,将不胜感激:)

更新:所以我需要将 [] 用于范围,但如果我这样做,我不会得到匹配,而 () 确实会生成某种类型的匹配 - 至少它会删除匹配的文本 >.

Unicode 范围匹配似乎没有发挥应有的作用。

[unicoderange]+ 应该匹配我认为的一个或多个 unicode 项。

谢谢!

【问题讨论】:

  • m8 展示了一些应该匹配的字符串和不应该匹配的字符串

标签: javascript regex unicode


【解决方案1】:

我想我知道我测试了你的案例并发现我工作的问题是什么

https://regex101.com/r/xU6qJ6/1

你可能只需要添加一个捕获组尝试使用这个:

/\[\[([\u3040-\u309F]+)\]\]/gm 

在 () 之间的正则表达式中是一个捕获组,您可以稍后返回

【讨论】:

  • 是的!这行得通。混合范围和捕获组是吸引我的原因。 ([ - ]) 语法。谁说正则表达式没有诗意?
猜你喜欢
  • 2021-05-30
  • 2016-12-07
  • 2010-09-28
  • 2013-12-12
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 2016-04-22
相关资源
最近更新 更多