正则表达式为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项目。
谢谢!
我想我知道什么问题我测试你的情况,我发现我的工作
https://regex101.com/r/xU6qJ6/1
你可能只需要添加一个捕获组尝试使用这样的:
/\[\[([\u3040-\u309F]+)\]\]/gm
在()之间的正则表达式之间的东西是一个捕获组,然后您可以稍后返回
是的!这工作。混合范围和捕获组是我得到的。 ([ - ])语法。谁说正则表达式不是诗意的? – dcsan 2014-12-08 09:58:38
m8显示一些应匹配的示例字符串和不匹配的字符串 – Vajura 2014-12-08 07:46:00