【问题标题】:Prismjs: regex positive lookbehind equivalent?Prismjs:正则表达式正后视等效?
【发布时间】:2020-03-12 08:21:00
【问题描述】:

我正在使用 Prism.js,它是语法高亮工具,它会高亮匹配某些正则表达式的单词。
我想匹配单词git之后的任何单词,所以我尝试像这样使用积极的lookbehind。

(?<=git )\w+

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

例如,我想在没有积极后视的情况下执行此操作。

"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"

这不是我想要的。

【问题讨论】:

  • 试试git\s+(?&lt;highlightIt&gt;\w+)git\s+\K\w+。一般来说,如果您无法访问组并且没有环视功能或\K 运算符,则无法执行您需要的操作。
  • @WiktorStribiżew 它似乎支持正/负前瞻,但不支持正/负后瞻。是否不可能使积极的后视与前瞻等效?
  • 消费模式是不可能的。 (?&lt;!^) = (?!^),但 (?&lt;!abc) != (?!abc)
  • 所以在阅读了一些文档之后。不应该有lookbehind: true 选项吗?当设置为TRUE 时,正则表达式模式中的第一个捕获组在匹配此标记时会被丢弃,因此它的行为就像是向后看一样。 This 就是我的意思。检查关于lookbehind的部分。因为我不确定棱镜到底是什么,所以我完全可以在这里。但我认为值得一提。
  • @JvdV 我不知道有一个lookbehind 选项!谢谢你。它的工作原理就像lookbehind。

标签: regex regex-lookarounds prismjs


【解决方案1】:

正如@WiktorStribiżew 在 cmets 中正确提到的那样“如果您无法访问组并且没有环视功能或 \K 运算符,那么您将无法做您需要的事情。”但是,如果对 Prism 了解不多,通过它的文档搜索将我带到 thislookbehind 选项部分指出:

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


上面应该意味着你可以尝试这样的模式:(\bgit )\w+,当你设置了lookbehind: true

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 2016-04-23
    • 2020-02-01
    • 2012-08-21
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多