有什么事情不记得反向引用中的最后一个Matched值吗?

(abc|def)=\1 matches abc=abc or def=def, but not abc=def or def=abc.


在字符串中,我需要使用反向引用匹配匹配abc = def或def = abc的模式。但是我只能匹配abc = abc或def = def。

我可以使用像(abc|def)=(abc|def)这样的正则表达式来做到这一点,它可以匹配所有情况,例如abc = abc,def = def,abc = def,def = abc

在我的情况下,abc或def是一件很长的搜索工作,如果我必须更改正则表达式,则必须在两个地方都进行更改。有没有办法在没有记忆的情况下反向引用该小组?

https://regex101.com/r/bL9wU1/1

最佳答案

您不能将反向引用用于此任务。


  向后引用与捕获组先前匹配的文本相同。


也就是说,它们不使用在捕获组中定义的相同模式。

一种解决方法是使用块构建动态正则表达式模式,并使用RegExp构造函数:



var ss = [ "abc=abc", "def=def", "abc=def", "def=abc"]; // Test strings

var block = "(?:abc|def)";                             // Define the pattern block
var rx = RegExp(block + "=" + block);                  // Build the regex dynamically
document.body.innerHTML += "Pattern: <b>" + rx.source
          + "</b><br/>";                               // Display resulting pattern
for (var s = 0; s < ss.length; s++) {                  // Demo
  document.body.innerHTML += "Testing \"<i>" + ss[s] + "</i>\"... ";
  document.body.innerHTML += "Matched: <b>" + rx.test(ss[s]) + "</b><br/>";
}

关于javascript - Javascript:在Regex中进行反向引用而无需记住上一个匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35029015/

10-11 06:14
查看更多