日期:2014-05-16  浏览次数:20350 次

JavaScript正则表达式的替换问题
我想用一个正则表达式来把 <script   lanuage= "JavaScript "> ..... </script> 替换为空,但就是一直写不好,请大家指教

------解决方案--------------------
\ <script(?: .+?)\> [\w\W]*?\ </script\>
------解决方案--------------------
/ <script[^> ]*> [\s\S]*? <\/script> /g
------解决方案--------------------
<script.*? </script> 里面有个换行就匹配失败了.....
------解决方案--------------------
/ <script[^> ]*> [\s\S]*? <\/script> /g 效率最高而且适应各种情况
1楼的
<script
language= "javascript ">
...
</script>
或者
<script>
...
</script> 时就无法匹配
------解决方案--------------------
/ <script[^> ]*> [\s\S]*? <\/script> /g
------解决方案--------------------
gzdiablo() ( ) 信誉:100 Blog 2007-03-23 16:29:20 得分: 0
/ <script[^> ]*> [\s\S]*? <\/script> /g 效率最高而且适应各种情况
1楼的
<script
language= "javascript ">
...
</script>
或者
<script>
...
</script> 时就无法匹配


-------------

<script
language= "javascript ">
...
</script>
是无法匹配,那是我偷懒了

<script>
...
</script>
无法匹配?你看测试过了吗?

对于\ <script(?: .+?)\> 的写法我认为还是比较合理的,这指定了这个标签名必须是script,即script标签中如果有其它属性的话需加一个空格再列属性值.如
<script language= "jscript ">
这个空格是必须的
假如有一个用户自定义的标签 <script2> ,那么你的正则就会产生错误了.
------解决方案--------------------
至于效率最高,适用所有情况云云
完全是自我感觉良好
------解决方案--------------------
这个问题如果是IE5.5以后的版本建议写成
<script(?=[\s> ])[^> ]*> [\s\S]*? </script>
------解决方案--------------------
再纠定你一个吧
/ <script[^> ]*> [\s\S]*? <\/script> /g
很明显的参数应该是ig
前面的我就不帮你改了
------解决方案--------------------
这个问题如果是IE5.5以后的版本建议写成
<script(?=[\s> ])[^> ]*> [\s\S]*? </script>
--------
倒不如写成
<script(?:\s+.*?)> [\w\W]*? </script>
可读性好一点
------解决方案--------------------
写漏了,应该是
<script(?:\s+.*?)?> [\w\W]*? </script>
------解决方案--------------------
反而 <script> ... </script> 的情况出现的可能性 比 <script2> 出现的可能性要大得多
------解决方案--------------------
一楼的写法确实有这问题

是我疏忽了
------解决方案--------------------
呵呵,说了半天真是我的错


你的正则写的不错,但是对这个例子这也谈不上是十全十美的解决吧,而且我觉得你不大喜欢用非贪婪模式至于正则可读性下降了很多.

------解决方案--------------------
你的表达式的确有可参考的部分 参考你的写法 我又写了一条
<script(?:\s[^> ]*)?> [\s\S]*? </script>

.*?是正则匹配中效率最低的而且不能匹配换行符 请尽量不要使用
贪婪匹配的效率高与非贪婪匹配 *效率高于 *? 请注意
所以使用[^> ]* 效率远高于.*? 在匹配整站网页代码的时候效率差距是很明显的

[\w\W]的确有与[\s\S]一样的效果 但[\s\S]效率稍微高于[\w\W]
因为\s只有空和换行2 种情况 而\w \W 所匹配的情况则非常多效率自然低很多