开发者

javascript RegExp: how to match multiline and closetag

开发者 https://www.devze.com 2023-03-02 07:59 出处:网络
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<s
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 + d开发者_Python百科oSomething(script) + suffix;
})

But I got wrong script: var x=0;</script><div>..</div><script>var y=0;

What I want is: var x=0; and var y=0;


Use regex like below:

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

In Javascript we cannot make . dotall so we use the [\s\S] character class which matches any character either whitespace or not whitespace including newline. ? is for non-greedy match so that you don't nest script tags.


This function matches SCRIPT elements contents and returns the strings in an array:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号