我有两个复杂的正则表达式,它们执行相同任务的两个部分。结果,我基本上是双重工作 - 一次使用rex A,一次使用rex B.我想使用| (or)
将两者结合起来,这样就可以一次性完成。
Rex A,对于包含在匹配的js-mmented md5中的字符串是正确的。
EG:/*a1700e65a69859ac8c56b0baef91b61a*/this text, as well as the enclosing comments will be matched. There may or may not be a new line between this string and the closing md5/*a1700e65a69859ac8c56b0baef91b61a*/
(\/\*(.){32}\*\/).*(\n)?\1
Rex B的表现相似,但对于html-stlye评论的问题:EG:<!--a1700e65a69859ac8c56b0baef91b61a-->text-text-text<!--a1700e65a69859ac8c56b0baef91b61a-->
(<!--(.*)-->).*(\n)?\1
我尝试的事情:
// simple or. this ignores the latter of the or
(\/\*(.){32}\*\/).*(\n)?\1|(<!--(.){32}-->).*(\n)?\1
// thinking it may have been greedy, i switched it. No real change in behavior
(<!--(.){32}-->).*(\n)?\1|(\/\*(.){32}\*\/).*(\n)?\1
我尝试将交换机放在捕获组中,而不是RexA|RexB
。这似乎有类似的效果。它将匹配匹配注释之间的任何内容,但似乎排除了包装它的封闭注释。
((\/\*)|(<!--)(.){32}(\*\/)|(-->)).*(\n)?\1
Here是regex101演示。
任何提示?
答案 0 :(得分:0)
如何将每个人包裹在非捕获组<
中,并在中间放置一个替代(?:)
?
|
答案 1 :(得分:0)
从左侧开始计算捕获组的编号,计算捕获组的左括号。根据我的统计,这意味着您的\1
尝试中的最后|
(两者)应该改为\4
?