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; }