在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”]
不要使用重复的捕获组,使用多个匹配,必要时单独验证。我不确定您的确切意思,您的意思是我应该指定有限数量的匹配,而不是循环使用它们吗?请参阅我的答案。。。
/^#[^|]+\|[^|]+(?:\|[^|]+\|[^|]+)*$/