regex 如果其他组在它之前不匹配,则使用JavaScript正则表达式组进行匹配

ttcibm8c  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(117)

如果第一个组没有捕获,我可以使用JavaScript正则表达式来捕获吗?
这里我有两(三)个捕获组:

/("[^\n"]*")|("[^\n"]*(?:\n|$))/g

我想要的是把任何不匹配的前两个,在另一个像这样

/("[^\n"]*")|("[^\n"]*(?:\n|$))|(<CATCH ANYTHING ELSE HERE>)/g

这可能吗?
在实践中,这意味着总是匹配整个字符串,但能够将其分段。
(我正在构建一个代码编辑器,试图解析代码中的字符串)。
我尝试添加(.*),但似乎总是在其他两个之前捕获。
编辑:
为了简化,假设我想把一个字符串分成两组:
1.所有字符均为a
1.不是a的所有字符
给定正则表达式/(a)|(^\1)/g,我会假设整个字符串都匹配,但事实并非如此。为什么?在更复杂的情况下,我假设使用backreferances更好?

5hcedyr0

5hcedyr01#

这个表达式完成了这项工作:

(regex1)|(regex2)|((?:(?!regex1|regex2).)*)

其中:

  • regex1是第一个正则表达式
  • regex2是第二个正则表达式
  • 最后一组捕获重复的单个字符,直到前两个regex中的一个匹配。特别地,(?!...)被称为negative lookahead

在您的示例中,可以使用/(a)|((?:(?!a).)*)/g
注意你的正则表达式也是错误的,因为^匹配beginning of a string
P.P.S.正如在注解中指出的,反向引用\1不起作用,因为它引用的是实际匹配的文本,而不是捕获它的表达式。

相关问题