多次使用否定前瞻(或使用^匹配多个字符)?

时间:2011-06-01 13:04:38

标签: javascript regex

我想做这样的事情:

/<script[^>]*>(?!<\/script>)*<\/script>/g

使用javascript匹配html字符串中的所有脚本标记。

我知道这不起作用,但我似乎无法找到任何其他解决方案。 script-tag可以使用src属性并在(<script src="..." type="text/javascript"></script>)之后自行关闭它,也可以包含脚本标记中的代码(<script type="text/javascript">...</script>

2 个答案:

答案 0 :(得分:6)

你很亲密

/<script[^>]*>(?:(?!<\/script>).)*<\/script>/g

你必须有东西吃实际的脚本体。这就是.在这里做的事情。

前瞻检查必须在每个字符之前进行,因此它包含在一个额外的(非捕获)组中。要捕获组1中的脚本源代码,只需在(?:...)周围添加另一组parens,如评论中指出的@AlanMoore。

答案 1 :(得分:2)

试试这个

/<script[^>]*>.*?<\/script>/g

我没有看到未来出现负面看法的原因。 .*?是一个懒惰的匹配,因此它只匹配到下一个结束标记,而不是直到最后一个。