正则表达式 - 如果存在三种模式,如何分组

时间:2015-09-23 15:17:18

标签: javascript regex

我正在尝试使用正则表达式搜索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@#<%

之前或之后都没有。

2 个答案:

答案 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