var t = "";
var a = ["atom-required","atom-label","atom-data-type","atom-regex"];
var r = /atom\-(label|required|regex|data\-type|class|is\-valid|field\-value|error)/i;
function test(a, r){
for(var i = 0; i<a.length; i++){
t += a[i] + " => " + r.test(a[i]) + "<br/>";
}
}
test(a, r);
t += "<br/>";
a = ["atom-required","atom-label","atom-data-type","atom-regex"];
var r = /atom\-(label|required|regex|data\-type|class|is\-valid|field\-value|error)/gi;
test(a, r);
$("#results").get(0).innerHTML = t;
当没有指定g时,它可以正常工作,
atom-required => true
atom-label => true
atom-data-type => true
atom-regex => true
当指定g时,它交替工作
atom-required => true
atom-label => false
atom-data-type => true
atom-regex => false
最佳答案
因为使用 g
修饰符,正则表达式变得有状态,并在最后一次匹配后的索引处恢复下一次搜索。
当找不到匹配项时,它会自行重置。
您可以使用 .lastIndex
观察起点属性(property)。
r.lastIndex; // 0 or some higher index
您可以通过将该属性设置为 0
来手动重置它。
r.lastIndex = 0
关于javascript - RegExp测试方法中的 "g"如何交替工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013632/