Regex 在<;脚本></脚本>;带有正则表达式的标签,用于Coldfusion,包括换行符

Regex 在<;脚本></脚本>;带有正则表达式的标签,用于Coldfusion,包括换行符,regex,coldfusion,Regex,Coldfusion,我试图从通过CFHTTP请求接收的HTML内容中提取javascript代码 我有一个简单的正则表达式,只要标记之间的代码中没有换行符,它就可以捕获所有内容 var result=REMatch("<script[^>]*>(.*?)</script>",html); var result=REMatch(“]*>(.*)”,html); 这将抓住: <script>testtesttest</script< testtest(?m)多

我试图从通过CFHTTP请求接收的HTML内容中提取javascript代码

我有一个简单的正则表达式,只要标记之间的代码中没有换行符,它就可以捕获所有内容

var result=REMatch("<script[^>]*>(.*?)</script>",html);
var result=REMatch(“]*>(.*)”,html);
这将抓住:

<script>testtesttest</script<
testtest
(?m)
多行模式用于在换行符上进行
^
$
匹配(默认情况下不只是字符串的开始/结束),但您在这里尝试的是使
包括新行-您想要的
(?s)
(点所有模式)

然而,我可能不会用正则表达式来实现这一点-HTML解析器是一个更健壮的解决方案。以下是如何使用:

关于在CF中使用jSoup的更多细节是,或者您也可以使用解析器(因此您不必担心JAR/etc)


如果您真的想要正则表达式,那么您可以使用:

var result = rematch('<script[^>]*>(?:[^<]+|<(?!/script>))+',html);

您可以使用点匹配所有模式或将
替换为
[\s\s]
以获得相同的效果

<script[^>]*>[\s\S]*?</script> would match everything including newlines.
]*>[\s\s]*?将匹配所有内容,包括换行符。

使用
[\s\s]
的唯一原因是当
(?s)
不可用时(但它在这里)。@PeterBoughton,您的回答提到了?s修饰符,因此我提到了另一种替代方法,使用合适的HTML解析器可能比使用正则表达式更好:|。这是值得一读的喜剧价值:)
var result = rematch('<script[^>]*>(?:[^<]+|<(?!/script>))+',html);
result = ListRest( result[1] , '>' );
<script[^>]*>[\s\S]*?</script> would match everything including newlines.