我有这个字符串1xxx5xx1x7xxx8
。我想获得匹配,以便得到以下结果:
match[0] = '1xxx5'
match[1] = '5xx1'
match[2] = '1x7'
match[3] = '7xxx8'
因此基本模式是在数字之间获得1
或more
x
的组。到目前为止,我有这个基本的正则表达式,但它不起作用:
/\dx{1,}\d/
我使用的字符串只是一个例子,模式可以继续使用字符串。
答案 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)