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

Javascript 正则表达式-如果存在三种模式,如何分组,javascript,regex,Javascript,Regex,我试图使用正则表达式搜索HTML页面上的某些元素,并捕获是否满足三种模式。任何帮助都将不胜感激 元素是javascript,可以在多行上 我正在寻找任何匹配的模式 <script XXXXXXXXX> ZZZZZZ ZZZZZZ ZZZZZZ ABCDEF ZZZZZZ ZZZZZZ </script> ZZZZZZ ZZZZZZ ZZZZZZ ABCDEF ZZZZZZ ZZZZZZ 我需要捕获所有Z以及ABCDEF XXXXXX可以是任何东西 我试过了 <

我试图使用正则表达式搜索HTML页面上的某些元素,并捕获是否满足三种模式。任何帮助都将不胜感激

元素是javascript,可以在多行上

我正在寻找任何匹配的模式

<script XXXXXXXXX>
ZZZZZZ
ZZZZZZ
ZZZZZZ
ABCDEF
ZZZZZZ
ZZZZZZ
</script>

ZZZZZZ
ZZZZZZ
ZZZZZZ
ABCDEF
ZZZZZZ
ZZZZZZ
我需要捕获所有Z以及ABCDEF

XXXXXX可以是任何东西

我试过了

<script[^>]*>(([\s\S]*?)ABCDEF([\s\S]*?)<\/script>
]*>(([\s\s]*?)ABCDEF([\s\s]*?)
但这似乎也捕获了没有ABCDEF的元素

<script>
QWERTY
</script>

<script>
ZZZZZZ
ABCDEF
ZZ@#<%
</script>


<script>
ASDFG
</script>

QWERTY
ZZZZZZ
ABCDEF

ZZ@#通过将正则表达式的一部分放在括号内,可以将正则表达式的该部分分组并捕获它

您的正则表达式匹配您想要的模式,但只返回两个单独的Zs块

假设您需要检索组,并且可以检索多个组,您可以尝试使用

<script[^>]*>([\s\S]*?)(ABCDEF)([\s\S]*?)<\/script>
]*>([\s\s]*?)(ABCDEF)([\s\s]*?)
返回三个组

如果你只需要一整组,里面有三种图案,你可以试试

<script[^>]*>([\s\S]*?ABCDEF[\s\S]*?)<\/script>
]*>([\s\s]*?ABCDEF[\s\s]*?)

使用此模式,应该会得到您想要的结果

]*>([\s\s]+)(?=(\bABCDEF\b))([\s\s]+)

第一组和第三组比赛

请看这里的演示

解释

<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
]*>:匹配脚本和其中的所有内容
[\s\s]+:匹配所有空白字符和非空白字符
(?=(\bABCDEF\b)):向前看,检查ABCDEF是否存在,其周围是否有边界
:匹配结束脚本

ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ生成一个应用于整个列表的正则表达式?这与我尝试过的方法类似。它最终捕获了任何使用ABCDEFi的脚本之前和之后的正则表达式。你不希望它捕获,并且?我理解你。我更新了我的答案和单击,你可以再次测试该模式并检查链接
<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