匹配脚本标记以外的所有标记的Ruby正则表达式

时间:2019-05-02 04:40:20

标签: regex ruby

例如,我有一个字符串:

content = "<h1>test</h1>\n<script>$(function(){alert('test')});</script>\n<b>bold</b>"

content.scan(/>.*?</m) # should not get the script tag content

谢谢。

2 个答案:

答案 0 :(得分:1)

我不确定Ruby是否支持PCRE,如果可以,您可以使用如下正则表达式动词:

<\/?script>(*SKIP)(*FAIL)|<\/?\w+>

Regex demo

如果您不能使用动词(跳过和失败),则可以使用如下的丢弃技术:

<\/?script>|(<\/?\w+>)

然后访问捕获组并获取匹配标签的内容

答案 1 :(得分:0)

使用negative lookahead

"<h1>test</h1>\n<script>$(function(){alert('test')});</script>\n<b>bold</b>".
  scan(/>[^<]*?<(?!\/script>)/)
#⇒ [">test<", ">\n<", ">\n<", ">bold<"]