RegExp对象保持先前的匹配

时间:2016-10-07 14:37:38

标签: javascript regex

考虑这个Javascript正则表达式代码:

v = 'The dog jumped over the moon';

// Matches
if (v.match(/(jump)ed/)) {
    alert('Initial: ' + RegExp.$1); // Alerts "jump"
}

// Obviously not matched, but RegExp object retains previous match
if (v.match(/(gygyujgujy)/)) {
    alert(RegExp.$1);
}

// Alerts "jump" but shouldn't this be null/false etc?
alert('Final: ' + RegExp.$1);

第二个正则表达式,尽管不匹配,但仍保留第一个正则表达式匹配。

由于第二个正则表达式不匹配,RegExp对象是否应该为空?

2 个答案:

答案 0 :(得分:2)

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/n

  

“$ 1,...,$ 9属性是静态的,它们不是单个正则表达式对象的属性。而是始终将它们用作RegExp。$ 1,...,RegExp。$ 9。

     

只要成功匹配,这些属性的值就是只读和修改。“

由于您的第二个if语句从不匹配任何内容,因此不会将新值分配给$ 1

答案 1 :(得分:0)

它们是非标准属性,documented为:

  

只要成功匹配,这些属性的值就是只读和修改。

gygyujgujy没有匹配,因此现有值仍然存在。