打印

请教一个问题!

如何利用JS实现:删除文章中所有的以"["开始"]"结束并且其中不含有“:”的内容?


 提示:您可以先修改部分代码再运行
居处恭 执事敬 与人忠


 提示:您可以先修改部分代码再运行
[ 本帖最后由 wjeasy 于 2006-12-17 21:45 编辑 ]
2楼的比我快了 ,不过2楼没有考虑到在[]中间可能还会含有[]情况。

TOP

不是没考虑到,是考虑之后决定不理它,既然楼定义得那么宽泛
像[aaa[bbc]]这样的,它何尝不符合以"["开头以"]"结尾里面不含":"?
恰恰按三楼的办法处理过后,反倒出现了[aaa]这么一个无可争议不该存在的东西

[ 本帖最后由 mozart0 于 2006-12-17 21:47 编辑 ]
居处恭 执事敬 与人忠

TOP

可是这样的话像  a[1]b[2]c  这样的就直接变成了 ac 了

TOP

我想这样实现

 提示:您可以先修改部分代码再运行
但是为什么test一会儿是true,一会儿是false呢? 不过我在循环中又写了一次 test就能实现了.,现在 就是不管它套多少层都能正确的识别了。


+++++++++++++++++++++++++++++++++++

哦,发现问题了,如果把全局选项去掉就可以了,但是不知其中原因,难道 test 会改变原来的内容?

 提示:您可以先修改部分代码再运行
[ 本帖最后由 wjeasy 于 2006-12-18 09:51 编辑 ]

TOP

re #7:

不是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,会从该位置继续
下面两段代码的执行结果可以证明这一点:

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


 提示:您可以先修改部分代码再运行
居处恭 执事敬 与人忠

TOP

谢谢楼上的,知道了,以后要再遇到就知道怎么解决了,两种方法:
1.每次都写新的正则表达式对象.
2.不用全局选项

TOP

谢谢各位朋友!

TOP