我正在尝试扩展 JS markdown 脚本,以便在日语文本的文本用双方括号(又名维基链接)包围时自动添加链接。现在我有三个问题:)
当我找到 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 项目。
谢谢!
最佳答案
我想我知道问题是什么,我测试了你的案例,发现我工作了
https://regex101.com/r/xU6qJ6/1
您可能只需要添加一个捕获组尝试使用此:
/\[\[([\u3040-\u309F]+)\]\]/gm
在正则表达式中,() 之间的内容是一个捕获组,您可以稍后返回它
关于javascript - 带 markdown 的 unicode 正则表达式 [[WikiLinks]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27353139/