为什么正则表达式对象定义在函数外面执行结果不一致?

king_jzg 2009-12-30 11:37:05

<script>
var opts = /(>)|(<)|(>=)|(<=)/gi;
function f(){
var msg = "aa>65";
alert(opts.test(msg));
}
</script>
<input type="button" value="Test" onclick="f();"/>


不停的点击按钮,提示正则表达式执行结果不一致,为什么会这样?
...全文
53 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcwtitxu 2009-12-30
  • 打赏
  • 举报
回复
开启全局匹配后,

每次 执行test方法 将会在前一次的 上一次匹配的位置开始向后搜索匹配

可以把 全局模式去掉

 var opts = /(>)|(<)|(>=)|(<=)/i;
function f(){
var msg = "aa>65";
alert(opts.test(msg));
}


或者

重置 lastIndex 属性
 var opts = /(>)|(<)|(>=)|(<=)/gi;
function f(){
var msg = "aa>65";
opts.lastIndex = 0;
alert(opts.test(msg));
}


正则声明在函数中,每次执行 f() 都是创建一个新的 RegExp 实例.
声明在外面时,每次执行都是使用原来的那个

87,914

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧