正则表达式为unicode降价[[WikiLinks]]

问题描述:

我试图扩展一个JS标记脚本来自动添加链接文本用双方括号(又名wikilinks)为日文文本包围。现在我有三个问题:)正则表达式为unicode降价[[WikiLinks]]

正则表达式的结果似乎不给我$ 1组类型匹配的元素,当我使用Unicode被发现

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项目。

谢谢!

+0

m8显示一些应匹配的示例字符串和不匹配的字符串 – Vajura 2014-12-08 07:46:00

我想我知道什么问题我测试你的情况,我发现我的工作

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

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

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

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

+0

是的!这工作。混合范围和捕获组是我得到的。 ([ - ])语法。谁说正则表达式不是诗意的? – dcsan 2014-12-08 09:58:38