在Javascript中匹配多个正则表达式组
我很难让我的正则表达式匹配所有组 我的正则表达式:在Javascript中匹配多个正则表达式组,javascript,regex,Javascript,Regex,我很难让我的正则表达式匹配所有组 我的正则表达式:/^#(\\\\?[^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\?)+?$/g 测试字符串:#something | somethingelse | morestuff | evenmorestuff 我想要的匹配是成对的东西匹配,比如:something | somethingelse和morestuff | evenmorestuff应该是第1组和第2组。但我只能让最后一批人回来 我的代码如下所示(我使用的是Javasc
/^#(\\\\?[^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\?)+?$/g
测试字符串:#something | somethingelse | morestuff | evenmorestuff
我想要的匹配是成对的东西匹配,比如:something | somethingelse
和morestuff | evenmorestuff
应该是第1组和第2组。但我只能让最后一批人回来
我的代码如下所示(我使用的是Javascript)
匹配[0]
返回整个字符串匹配[1]
返回morestuff | evenmorestuff
匹配[2]
未定义。您的正则表达式是如何工作的示例:(ab)+
仅捕获abababab
字符串中最后出现的ab
在您的情况下,您可以执行两个步骤:1)验证输入字符串以确保其符合所需的模式;2)使用基于g
的正则表达式从字符串中提取部分
要验证您可以使用的字符串
/^#[^|]+\|[^|]+(?:\|[^|]+\|[^|]+)*$/
看。它基本上是您的原始正则表达式,但效率更高,没有捕获组(我们在这一步不需要它们),并且它不允许在字符串的开头/结尾添加\\\\\\\*
(如果需要,您可以在\\\
之后和$
之前添加)
详细信息
^#
-
位于字符串开头
[^ |]+
-1+字符,而非
\\\\\
-a\
[^ |]+
-1+字符,而非
(?:\\\\[^ |]+\\\\[^ |]+)*
-0+序列
\\\\\\
-a\
字符
[^ |]+\\\[^ |]+
-1+字符,而非
,
和1+字符,而非
$
-字符串结束
要提取对,可以使用一个简单的正则表达式(输入将是从位置1开始的子字符串)
整体解决方案:
var s=“#something | somethingelse | morestuff | evernmorestuff”;
变量rx|u validate=/^.[^.]+\\\\\\\[^.]+(?:\\\\\\.[^.]+\\\\\\\\[^.]+)*$/;
变量rx|u extract=/([^ |]+)\\\\([^ |]+)/g;
var m,结果=[];
如果(rx_验证试验){
while(m=rx_extract.exec(s.substr(1))){
结果:push([m[1],m[2]]);
}
}
控制台日志(结果);
//或者只是成对的字符串
//console.log(s.substr(1.match)(rx_extract));
//=>[“something | somethingelse”,“morestuff | evenmorestuff”]
不要使用重复的捕获组,使用多个匹配,必要时单独验证。我不确定您的确切意思,您的意思是我应该指定有限数量的匹配,而不是循环使用它们吗?请参阅我的答案。。。
/^#[^|]+\|[^|]+(?:\|[^|]+\|[^|]+)*$/