JavaScript中的regexp意外行为

时间:2014-01-09 12:36:29

标签: javascript regex debugging

我遇到了这种奇怪的行为:enter image description here

我正处于断点(变量不会改变)。在控制台你可以看到,每次我尝试在同一个不变的变量“text”上评估regexp方法时,我会得到这些相反的响应。这样的事情有解释吗?

相关代码在这里:

this.singleRe = /<\$([\s\S]*?)>/g;    

while( this.singleRe.test( text ) ){
        match = this.singleRe.exec( text );

        result = "";

        if( match ){

            result = match[ 1 ].indexOf( "." ) != -1 ? eval( "obj." +  match[ 1 ] ) :  eval( "value." + match[ 1 ] );

        }

        text = text.replace( this.singleRe , result );

    }

1 个答案:

答案 0 :(得分:4)

当您使用正则表达式exec()全局标记 - g时,每次都会更改游标,如下所示:

var re = /\w/g;
var s = 'Hello regex world!'

re.exec(s); // => ['H']
re.exec(s); // => ['e']
re.exec(s); // => ['l']
re.exec(s); // => ['l']
re.exec(s); // => ['o']

注意g标志!这意味着正则表达式将匹配多个出现的而不是一个!

修改

如果可能,我建议您不要使用regex.exec(string)来使用string.match(regex)。这将产生一系列的出现,很容易检查数组或迭代它。