gpt4 book ai didi

javascript - 如何否定捕获组?

转载 作者:行者123 更新时间:2023-11-29 21:06:34 25 4
gpt4 key购买 nike

使用 javascript 正则表达式,我想找到类似 "/foo""/foo d/" 但不是 "/foo/"的字符串;即,“注释字符”,然后是没有终止注释的单词,或多个单词,其中终止出现在短语的末尾(没有空格)。使情况复杂化的是三种可能的注释符号:/\|

我试过类似的方法:

/(?:^|\s)([\\\/|])((?:[\w_-]+(?![^\1]+[\w_-]\1))|(?:[\w\s]+[\w](?=\1)))/g

也就是从空格开始,然后是注释,然后是

  1. 单词后面没有(除了注释之外的任何内容)然后是字母和注释......或者
  2. 可能是多个单词,紧跟注释字符。

问题是 [^\1]:这在尖括号中读作“除了注释字符之外的任何东西”。

我可以将整个短语重复三遍,每个注释字符重复一遍。有更好的想法吗?

最佳答案

正如您所提到的,[^\1] 不起作用 - 它匹配任何不是字符 1 的内容。在 JavaScript 中,您可以通过使用前瞻来否定 \1:(?:(?!\1).)* 。这不是那么有效,但它有效。

你的模式可以写成:

([\\\/|])([\w\-]+(?:(?:(?!\1).)*[\w\-]\1)?)

Working example at Regex101

  • \w 已经包含下划线。
  • 我使用可选组 (a(?:b)?) 而不是交替 (a|ab) - 我们始终匹配第一个单词,可选的更多单词和标签。
  • 您可能仍想在开头包含 (?:^|\s)

关于javascript - 如何否定捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43774002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com