首页 > 解决方案 > 如何在 OR 条件下为通配符编写正则表达式,例如 .(任何字符不是空格)和 \s(空格)

问题描述

我有以下字符串。

some<script type=\"text/javascript\" language=\"javascript\"><!--\n" + " tempArr[4728] = 0; \n" + "//--></script>text

这包括空格和其他非字母字符。

我需要一个正则表达式来替换脚本标签及其内容,所以结果应该是:

some text

我为此尝试了以下正则表达式。

<script(.)*(\s)*(.)*(\s)*(.)*<\/script>

我能够得到输出,但是当我观察正则表达式时,我可以看到重复的条件((.)*和的多个副本(\s)*)。

如何使用正则表达式简化它OR

我尝试使用字符类 - 请参见此处

标签: javaregexregex-group

解决方案


使用不情愿的量词和全点标志以直接的方式匹配整个script标签:

(?s)<script\b.*?</script>

像这样使用它:

str = str.replaceAll("(?s)<script\\b.*?</script>", "");

(?s)标志也使点匹配换行符。

Putting\b表示“单词边界”,afterscript表示它不会意外匹配以开头的较长标签名称script,例如<scriptX>.

.*?匹配尽可能少的字符,所以它只会匹配到下一个实例</script>(如果有多个脚本标签)。


推荐阅读