javascript - 带 markdown 的 unicode 正则表达式 [[WikiLinks]]

标签 javascript regex unicode

我正在尝试扩展 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/

相关文章:

javascript - Node 和 mongodb 的错误

javascript - html canvas - 绘制带动画和数字的圆圈

javascript - 如何在 JSDOC 的 'group' 中显示 Javascript 方法?

javascript - .last() 和 :last 的性能差异

python - Python 2.7 "wide-build"usc4 是否与某些库不兼容?

python - 为什么字符串对象的 IronPython str() 会引发 UnicodeEncodeError?

ios - 使用正则表达式在 ios 中标记字符串

多部分字段上的正则表达式

java - 为什么这个正则表达式会杀死 Java 正则表达式引擎?

json - 如何在 Swift 中显示间接给定的 unicode 字符?