如果第一个组没有捕获,我可以使用JavaScript正则表达式来捕获吗?
这里我有两(三)个捕获组:
/("[^\n"]*")|("[^\n"]*(?:\n|$))/g
我想要的是把任何不匹配的前两个,在另一个像这样
/("[^\n"]*")|("[^\n"]*(?:\n|$))|(<CATCH ANYTHING ELSE HERE>)/g
这可能吗?
在实践中,这意味着总是匹配整个字符串,但能够将其分段。
(我正在构建一个代码编辑器,试图解析代码中的字符串)。
我尝试添加(.*)
,但似乎总是在其他两个之前捕获。
编辑:
为了简化,假设我想把一个字符串分成两组:
1.所有字符均为a
1.不是a
的所有字符
给定正则表达式/(a)|(^\1)/g
,我会假设整个字符串都匹配,但事实并非如此。为什么?在更复杂的情况下,我假设使用backreferances更好?
1条答案
按热度按时间5hcedyr01#
这个表达式完成了这项工作:
其中:
regex1
是第一个正则表达式regex2
是第二个正则表达式(?!...)
被称为negative lookahead。在您的示例中,可以使用
/(a)|((?:(?!a).)*)/g
。注意你的正则表达式也是错误的,因为
^
匹配beginning of a string!P.P.S.正如在注解中指出的,反向引用
\1
不起作用,因为它引用的是实际匹配的文本,而不是捕获它的表达式。