【发布时间】:2013-05-16 05:56:28
【问题描述】:
将全局标志设置为真:
<script>
var str="I am really puzzled up";
var str1="Being puzzled is first step towards understanding";
var patt=new RegExp("puzzled","gi");
patt.exec(str);
alert(RegExp.$_); //I am really puzzled up *[1]
patt.exec(str1);
alert(RegExp.$_); //I am really puzzled up *[2]
patt.exec(str1);
alert(RegExp.$_); //Being puzzled is first step towards understanding *[3]
</script>
不设置全局标志为真:
<script>
var str="I am really puzzled up";
var str1="Being puzzled is first step towards understanding";
var patt=new RegExp("puzzled","i");
patt.exec(str);
alert(RegExp.$_); //I am really puzzled up
patt.exec(str1);
alert(RegExp.$_); //Being puzzled is first step towards understanding
</script>
输出已由 cmets 显示
- [1]-我对这个输出很满意
- [2]-现在,当我已经将模式与其他一些字符串构造函数属性匹配时,仍然显示我第一个匹配的字符串
- [3]-只有再次将模式与字符串匹配,我才能得到想要的结果。
为什么我必须使用patt.exec method 两次才能通过构造函数属性更改更新结果?
问题-仅当模式的 global 标志设置为 true 时才会发生。如果未设置全局标志,则构造函数属性的结果更新是第一次发生。
【问题讨论】:
-
RegExp.$_已弃用。 developer.mozilla.org/en-US/docs/JavaScript/Reference/… -
好的,但它仍然向我显示了全局标志集的输出(不正确的一个)......并且显示了非全局标志的正确输出。
-
先生在那一页上写着他们将来会被完全弃用。目前可以使用
-
Deprecated 表示如果您已经在旧代码中使用它,建议您远离它/不要在新代码中使用它。
标签: javascript regex constructor exec