javascript RegExp:如何匹配multiline和closetag

时间:2011-04-30 02:51:44

标签: javascript regex node.js

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;

2 个答案:

答案 0 :(得分:20)

使用如下所示的正则表达式:

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

在Javascript中我们不能使. dotall所以我们使用[\ s \ S]字符类来匹配任何字符,包括空格或不包括换行符的空格。 ?用于非贪婪匹配,因此您不会嵌套脚本标记。

答案 1 :(得分:3)

此函数匹配SCRIPT元素内容并返回数组中的字符串:

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