debugging RegExp exec无法在for循环程式码片段中运作- Javascript [duplicate]

mnemlml8  于 2022-11-24  发布在  Java
关注(0)|答案(1)|浏览(107)

此问题在此处已有答案

Why does a RegExp with global flag give wrong results?(7个答案)
2天前关闭。
有人能帮我检查一下这个代码片段吗?我只是在数组上循环,但是最后一项返回false或null,即使它与模式匹配。

let texts = ["Invoice_001_1", "Invoice_001_2"];
var regTest = /(([a-zA-Z 0-9]+)_([0-9]+)_([0-9]+)$|[a-zA-Z ]+_([0-9]+)$)/gi;

for(var x=0; x<texts.length; x++) {
    console.log(texts[x]);
    var matchReg = regTest.exec(texts[x]);
    console.log(matchReg);
}

JSfiddle Demo

yftpprvb

yftpprvb1#

问题是当使用/g时,js有一个小问题,它告诉正则表达式保留最后一个匹配的索引。修复方法是手动重置索引:

let texts = ["Invoice_001_1", "Invoice_001_2"];
var regTest = /(([a-zA-Z 0-9]+)_([0-9]+)_([0-9]+)$|[a-zA-Z ]+_([0-9]+)$)/gi;

for(var x=0; x<texts.length; x++) {
        console.log(texts[x]);
        var matchReg = regTest.exec(texts[x]);
    console.log(matchReg);
    regTest.lastIndex = 0;
}

相关问题