javascript RegExp:如何匹配多行和closetag var ex=/(]*>)([\s\s]*)()/; //注意:这里有2个脚本标记 var str='\nvar x=0\n\n\nhtml\n\nvar y=0\不 str.replace(例如,函数(完整、前缀、脚本、后缀){ 返回前缀+doSomething(脚本)+后缀; })

javascript RegExp:如何匹配多行和closetag var ex=/(]*>)([\s\s]*)()/; //注意:这里有2个脚本标记 var str='\nvar x=0\n\n\nhtml\n\nvar y=0\不 str.replace(例如,函数(完整、前缀、脚本、后缀){ 返回前缀+doSomething(脚本)+后缀; }),javascript,regex,node.js,Javascript,Regex,Node.js,但我得到了错误的脚本:varx=0;。。var y=0 我想要的是:varx=0和变量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<sc

但我得到了错误的脚本:
varx=0;。。var y=0

我想要的是:
varx=0
变量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;
})
([\s\s]*?)

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

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

//返回元素内容数组。
函数GetScriptsConnContents(文本){
var脚本=[];
var-m;
变量re=/]*>([\s\s]*?)/ig;
while(m=re.exec(text)){
scripts.push(m[1]);
}
返回脚本;
}

ridgerunner也是正确的,但是你解释了
的作用,谢谢。@guilin桂林 - 我已经说过了<代码>?
在这种情况下是指*?匹配0个或多个前一个标记,并在满足下一个标记之前匹配尽可能少的字符。所以像
这样的东西在整体上是不匹配的。不需要在开始和结束标签周围设置捕获组。还应考虑开始标记中的属性。否则,没有后顾之忧就更好了+1.
<script>([\s\S]*?)</script>