捕获重复的群体

时间:2018-01-16 22:00:18

标签: javascript regex

我有这个字符串1xxx5xx1x7xxx8。我想获得匹配,以便得到以下结果:

match[0] = '1xxx5'
match[1] = '5xx1'
match[2] = '1x7'
match[3] =  '7xxx8'

因此基本模式是在数字之间获得1more x的组。到目前为止,我有这个基本的正则表达式,但它不起作用:

/\dx{1,}\d/

我使用的字符串只是一个例子,模式可以继续使用字符串。

2 个答案:

答案 0 :(得分:2)

您可以使用RegExp.prototype.exec一次查找一个匹配项并在其间减少lastIndex以开始搜索下一个匹配项与一个重叠字符:

var str = '1xxx5xx1x7xxx8';
var regex = /\dx+\d/g;

var matches = [], match;
while ( match = regex.exec( str ) ) {
  matches.push( match[ 0 ] );
  regex.lastIndex--; // Start next search one char back (overlap matches)
}

console.log( matches );

答案 1 :(得分:1)

正则表达式引擎不支持重叠匹配,但您可以使用Paulpro的答案中的技巧。或者您可以为此编写自己的算法:

var myString = "1xxx5xx1x7xxx8";
var matches = [];
var curMatch = "";
for (var i = 0; i < myString.length; ++i) {
  var char = myString[i];
  if (char === "x") { // assumes you only have numbers or x's
    curMatch += char;
    continue;
  }

  if (curMatch) {
      matches.push(curMatch + char);
  }

  curMatch = char;
}

console.log(matches)