我目前在使用JS Regex时有点蠢。从以下代码中,我们需要提取div
或span
:
<span class="code">
!(true ^ false)
</span>
<span class="code">
(true ^ false)
</span>
因此,我们需要匹配!(true ^ false)
和(true ^ false)
我想出了以下正则表达式:/<(div|span) class="code">([\s\S]+)<\/(div|span)>/im
。当匹配文本中只有一个div
或span
时,此方法有效。但是,在上面列出的情况中,匹配是:
! (true ^ false)
</span>
<span class="code">
!(true ^ false)
所以基本上只需要开头和结尾tag
。我该如何解决这个问题?
答案 0 :(得分:2)
应该将<div>
与</div>
和<span>
与</span>
匹配,并使用?
正则表达式: <(div|span) class="code">([\s\S]+?)<\/\1>
<强>解释强>
将<div>
与</div>
匹配应使用\1
对第一个捕获的群组进行反向引用。
使用?
制作正则表达式以匹配最小标签。
<强> Regex101 Demo 强>
答案 1 :(得分:1)
您真正需要的是在?
后加+
使比赛变得非贪婪,然后添加g
修饰符以在第一场比赛后继续搜索:
<(div|span) class="code">\s*([\s\S]+?)<\/(div|span)>