javascript正则expression式:如何匹配多行和closetag

var ex = /(<script\s?[^>]*>)([\s\S]*)(<\/script>)/; //Note: here is 2 script tags var str = '<script>\nvar x=0;\n</script>\n<div>\nhtml\n</div>\n<script>var y=0;\n</script>' str.replace(ex, function(full, prefix, script, suffix) { return prefix + doSomething(script) + suffix; }) 

但是我得到了错误的脚本: var x=0;</script><div>..</div><script>var y=0;

我想要的是: var x=0;var y=0;

使用正则expression式如下:

 <script>([\s\S]*?)</script> 

在JavaScript中,我们不能做. 所以我们使用[\ s \ S]字符类匹配任何字符或者空白或者不包括换行符的空格。 ? 是非贪婪匹配,以便您不嵌套脚本标记。

这个函数匹配SCRIPT元素的内容并返回数组中的string:

 // Return an array of <script> elements contents. function getScriptsConntents(text) { var scripts = []; var m; var re = /<script[^>]*>([\s\S]*?)<\/script>/ig; while (m = re.exec(text)) { scripts.push(m[1]); } return scripts; }