分组如何在Javascript正则表达式中工作?

时间:2012-03-14 17:12:29

标签: javascript regex

鉴于此Javascript:

String.method('deentityify', function () {
    // The entity table.  It maps entity names to
    // characters.
    var entity = {
        quot: '"',
        lt: '<',
        gt: '>'
    };

    // Return the deentityify method
    return function () {

        return this.replace(/&([^&;]+);/g,
            function (a, b) {
                var r = entity[b];
                return typeof r === 'string' ? r : a;
            }
        );
    };
}());

document.writeln('&lt;&quot;&gt;'.deentityify());

作为a和b的最后一个函数是什么?为什么?

我知道我们正在将我传入的字符串拆分为3组,但我不明白为什么&lt;会进入a,为什么只有lt进入b

1 个答案:

答案 0 :(得分:2)

第一个参数包含整个匹配,所有连续参数都是匹配的组。最后两个参数是偏移量和完整输入字符串。

var input = '&lt;&quot;&gt;'
input.replace( /&([^&;]+);/g, function (a, b)

该模式匹配& +每non-& + ;的所有出现次数。

a      b
&lt;   lt 
&quot; quot
&gt;   gt

另请参阅:MDN: String.replace with a function