【发布时间】: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