Vin*_*ent 15 javascript regex string match
我正在尝试使用带有javascript的正则表达式从字符串中获取所有可能的匹配项.看来我的方法不匹配已匹配的字符串部分.
变量:
var string = 'A1B1Y:A1B2Y:A1B3Y:A1B4Z:A1B5Y:A1B6Y:A1B7Y:A1B8Z:A1B9Y:A1B10Y:A1B11Y';
var reg = /A[0-9]+B[0-9]+Y:A[0-9]+B[0-9]+Y/g;
Run Code Online (Sandbox Code Playgroud)
码:
var match = string.match(reg);
Run Code Online (Sandbox Code Playgroud)
我得到的所有匹配结果:
A1B1Y:A1B2Y
A1B5Y:A1B6Y
A1B9Y:A1B10Y
Run Code Online (Sandbox Code Playgroud)
我想要的匹配结果:
A1B1Y:A1B2Y
A1B2Y:A1B3Y
A1B5Y:A1B6Y
A1B6Y:A1B7Y
A1B9Y:A1B10Y
A1B10Y:A1B11Y
Run Code Online (Sandbox Code Playgroud)
在我的脑海中,我想A1B1Y:A1B2Y成为一个匹配A1B2Y:A1B3Y,即使A1B2Y在字符串中需要成为两个匹配的一部分.
Fab*_*tté 23
在不修改正则表达式的情况下,可以将其设置为在每次匹配后的匹配的后半部分开始时使用.exec和操作正则表达式对象的lastIndex属性开始匹配.
var string = 'A1B1Y:A1B2Y:A1B3Y:A1B4Z:A1B5Y:A1B6Y:A1B7Y:A1B8Z:A1B9Y:A1B10Y:A1B11Y';
var reg = /A[0-9]+B[0-9]+Y:A[0-9]+B[0-9]+Y/g;
var matches = [], found;
while (found = reg.exec(string)) {
matches.push(found[0]);
reg.lastIndex -= found[0].split(':')[1].length;
}
console.log(matches);
//["A1B1Y:A1B2Y", "A1B2Y:A1B3Y", "A1B5Y:A1B6Y", "A1B6Y:A1B7Y", "A1B9Y:A1B10Y", "A1B10Y:A1B11Y"]
Run Code Online (Sandbox Code Playgroud)
根据Bergi的评论,你也可以获得最后一场比赛的索引,并将其增加1,这样它不会从比赛的后半段开始匹配,它将开始尝试从每场比赛的第二个角色开始匹配:
reg.lastIndex = found.index+1;
Run Code Online (Sandbox Code Playgroud)
最终结果是一样的.虽然,Bergi的更新代码少了一些,但执行速度稍快.=]