javascript - RegExp测试方法中的 "g"如何交替工作?

标签 javascript regex

http://jsfiddle.net/bpt33/

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/

相关文章:

javascript - jQuery/Javascript - 仅显示与数组匹配的 tr 和 td

javascript - 如何从平面 JavaScript 数组创建分层 HTML 结构?

python - 如何获得正则表达式的最接近匹配

javascript - 没有前导零的儒略日正则表达式

regex - 用 r 中正确的位数替换数字

javascript - 在函数式编程中基于周围上下文过滤或映射的正确/惯用方法是什么?

javascript - 如何从数据库中检索数据并将它们转换为我的对象?

javascript - AngularJS http 返回值

regex - Haskell:我应该费心编译正则表达式吗?

java - 如何将几个 "Sqrt[some text inside]"变成几个 Sqrt(里面有一些文字),我的意思是从 [] 变成 ()