正则表达式访问多个事件

这个问题在这里已经有了答案:

  • 如何访问JavaScript正则表达式中的匹配组? 14个答案

  • 看到这个问题:

    txt = "Local residents o1__have called g__in o22__with reports...";
    var regex = /o([0-9]+)__/g
    var matches = [];
    var match = regex.exec(txt);
    while (match != null) {
        matches.push(match[1]);
        match = regex.exec(txt);
    }
    alert(matches);
    

    您需要在正则表达式对象上使用.exec() ,并使用g标志重复调用它以获取像这样的连续匹配:

    var txt = "Local residents o1__have called g__in o22__with reports...";
    var re = /o([0-9]+)__/g;
    var matches;
    while ((matches = re.exec(txt)) != null) {
        alert(matches[1]);
    }
    

    来自上一次匹配的状态作为lastIndex存储在正则表达式对象中,这就是下一个匹配使用的起点。

    你可以看到它在这里工作:http://jsfiddle.net/jfriend00/UtF6J/

    这里描述使用正则表达式:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec。


    /o([0-9]+?)__/g
    

    这应该工作。 点击这里搜索“懒星”。

    var rx = new RegExp( /o([0-9]+?)__/g );
    var txt = "Local residents o1__have called g__in o22__with reports...";
    var mtc = [];
    while( (match = rx.exec( txt )) != null ) {
            alert( match[1] );
            mtc.push(match[1]);
    }
    

    Jek-fdrv在评论中指出,如果您在while循环之前调用rx.test,则会跳过一些结果。 这是因为RegExp对象包含一个lastIndex字段,用于跟踪字符串中最后匹配的索引。 当lastIndex更改时,RegExp通过从lastIndex值开始保持匹配,因此字符串的一部分被跳过。 一个小例子可能有所帮助:

    var rx = new RegExp( /o([0-9]+?)__/g );
    var txt = "Local residents o1__have called g__in o22__with reports...";
    var mtc = [];
    console.log(rx.test(txt), rx.lastIndex); //outputs "true 20"
    console.log(rx.test(txt), rx.lastIndex); //outputs "true 43"
    console.log(rx.test(txt), rx.lastIndex); //outputs "false 0" !!!
    rx.lastIndex = 0; //manually reset lastIndex field works in Chrome
    //now everything works fine
    while( (match = rx.exec( txt )) != null ) {
            console.log( match[1] );
            mtc.push(match[1]);
    }
    
    链接地址: http://www.djcxy.com/p/76787.html

    上一篇: Regex access multiple occurrences

    下一篇: Regular expression to match numbers up to two decimal place