使用javascript regexp,我想找到"/foo"
或"/foo d/"
但不是"/foo /"
的字符串;即,"注释字符",然后是没有终止注释的单词,或多个单词,其中终止位于短语的末尾(没有空格)。使情况复杂化,有三种可能的注释符号:/
,\
和|
。
我尝试过类似的事情:
/(?:^|\s)([\\\/|])((?:[\w_-]+(?![^\1]+[\w_-]\1))|(?:[\w\s]+[\w](?=\1)))/g
也就是说,从空格开始,然后是注释,然后是
问题是[^\1]
:这并不是"除了注释字符之外的其他内容"在尖括号中。
我可以重复整个短语三次,每个注释字符一个。有更好的想法吗?
答案 0 :(得分:2)
正如您所提到的,[^\1]
不起作用 - 它匹配任何不是字符1
的内容。在JavaScript中,您可以使用前瞻:\1
否定(?:(?!\1).)*
。这不是那么有效,但它确实有效。
您的模式可以写成:
([\\\/|])([\w\-]+(?:(?:(?!\1).)*[\w\-]\1)?)
\w
已包含下划线。a|ab
),而不是替换(a(?:b)?
) - 我们总是匹配第一个单词,可选的其他单词和标签。(?:^|\s)
。