我正在尝试使用正则表达式搜索HTML页面上的某些元素,并捕获是否满足三个模式。任何帮助将不胜感激。
元素是javascript,可以在多行上。
我希望找到任何匹配的模式
<script XXXXXXXXX>
ZZZZZZ
ZZZZZZ
ZZZZZZ
ABCDEF
ZZZZZZ
ZZZZZZ
</script>
我需要捕获所有Z以及ABCDEF
XXXXXX可以是任何东西。
我试过了
<script[^>]*>(([\s\S]*?)ABCDEF([\s\S]*?)<\/script>
但这似乎也捕获了没有ABCDEF的元素。
<script>
QWERTY
</script>
<script>
ZZZZZZ
ABCDEF
ZZ@#<%
</script>
<script>
ASDFG
</script>
在这个例子中,我只想捕捉
ZZZZZZ
ABCDEF
ZZ@#<%
之前或之后都没有。
答案 0 :(得分:0)
通过将正则表达式的一部分放在括号内,可以将正则表达式的该部分分组并捕获它。
你的正则表达式匹配你想要的模式,但只返回两个独立的Zs块。
假设您需要检索群组,并且您可以检索多个群组,则可以尝试使用
<script[^>]*>([\s\S]*?)(ABCDEF)([\s\S]*?)<\/script>
返回三组。
如果您只需要一个包含所有三种模式的整个群组,请尝试使用
<script[^>]*>([\s\S]*?ABCDEF[\s\S]*?)<\/script>
答案 1 :(得分:0)
使用此模式,这应该会得到您想要的结果
<script[^>]*>([\s\S]+)(?=(\bABCDEF\b))([\s\S]+)<\/script>
匹配第1组和第3组
请参阅此处的演示https://regex101.com/r/wL4iL7/4
<强>解释强>
<script[^>]*>: matches script and everything within it
[\s\S]+: matches all white space and non whitespace characters
(?=(\bABCDEF\b)): a look ahead to check if ABCDEF is present with boundaries \b surrounding it
<\/script>: matches the closing script