最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

regex - javascript RegExp: how to match multiline and closetag - Stack Overflow

programmeradmin4浏览0评论
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;
})

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;

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

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;

Share Improve this question edited Apr 30, 2011 at 4:10 guilin 桂林 asked Apr 30, 2011 at 2:51 guilin 桂林guilin 桂林 17.4k30 gold badges96 silver badges148 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 20

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)

  1. 暂无评论