天山雪.NET

讨论.NET和网站技术/数据库

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

转自:http://bbs.blueidea.com/thread-2704718-1-1.html

<textarea id="aa" cols=50 rows=10></textarea>
<textarea id="bb" cols=50 rows=10></textarea>
<script>
var str="如何利用JS实现:删[2[23[526j[52i[58865[526]jkku]j]k]25]5]除文章[1]中[2]所有的以\"[\"开始\"]\"结束并且其中不含有[有':']的内容?";
var tmp=str;
var reg=/\w*\[[^:]*\]\w*/;
var c=0;

//alert(reg.test(str));alert(reg.test(str));alert(reg.test(str));alert(reg.test(str));

while(reg.test(tmp)){
//alert("已循环"+ ++c+"次");
tmp=tmp.replace(/\[[^:\[\]]*\]/g,"");
}

aa.value
=str;
bb.value
=tmp;
</script>


+++++++++++++
不是reg.test改变了str,而是reg.test改变了reg的内部状态
像这样的:
alert(/\w*\[[^:]*\]\w*/g.test(str));
alert(/\w*\[[^:]*\]\w*/g.test(str));
alert(/\w*\[[^:]*\]\w*/g.test(str));
alert(/\w*\[[^:]*\]\w*/g.test(str));
就一直会有确定的结果,因为每一句里的正则表达式对象都是独立的

虽然没看到有正式的资料,但我估计是这样的:
加了全局标志的正则对象在test时会记录成功匹配的位置,下次调用test,会从该位置继续
下面两段代码的执行结果可以证明这一点:


 提示:您可以先修改部分代码再运行


 


 提示:您可以先修改部分代码再运行
posted on 2006-12-23 18:38  天山雪王  阅读(452)  评论(0编辑  收藏  举报