首页 > 解决方案 > Prismjs:正则表达式正后视等效?

问题描述

我正在使用 Prism.js,它是语法荧光笔,它突出显示匹配某些正则表达式的单词。
我想匹配单词之后的任何单词git,所以我尝试像这样使用积极的lookbehind。

(?<=git )\w+

不幸的是,似乎不支持积极的后视,所以我必须找到它的等效正则表达式。有什么方法可以匹配单词后面的任何单词git而不使用正面的lookbehind?

例如,我想在没有积极向后看的情况下做到这一点。

"git checkout master" -> only "checkout"
"git log --graph" -> only "log"
"anything after the word git matches" -> only "matches"

另外,我不能使用组,因为我不能告诉 Prism 选择某个组。它将始终突出整场比赛。例如,(?:git )(\w+)将保存第一组中单词之后的任何单词git,但它匹配单词 git 和 git 之后的单词。所以会突出显示

"git checkout master" -> "git checkout"
"git log --graph" -> "git log"
"anything after the word git matches" -> "git matches"

这不是我想要的。

标签: regexregex-lookaroundsprismjs

解决方案


正如@WiktorStribiżew 在评论中正确提到的那样,“如果您无法访问组并且没有环视功能或 \K 运算符,那么您将无法做您需要的事情。” 一般来说,情况就是这样,但是,在不知道太多关于Prism搜索的情况下,它的文档将我带到了this,它在lookbehind选项部分指出:

“'lookbehind' :此选项可缓解 JavaScript 缺乏后向功能。当设置为 true 时,正则表达式模式中的第一个捕获组在匹配此标记时会被丢弃,因此它的行为就像是后向一样有效。”

在此处输入图像描述


以上应该意味着您可以尝试以下模式:(\bgit )\w+当您设置lookbehind: true.


推荐阅读