Javascript:在不记得上一场比赛的情况下在正则表达式中进行反向引用

Javascript: Back-Referencing in Regex without remembering last match

有什么不记得反向引用中最后一个匹配值的吗?

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

在一个字符串中,我需要匹配一个匹配 abc=defdef=abc 的模式与反向引用。但我只能匹配 abc=abcdef=def.

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

在我的例子中,abc 或 def 是一个很长的搜索过程,如果我必须更改正则表达式,我必须在两个地方都进行更改。有没有什么办法可以在没有记忆的情况下向后引用该组?

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

您不能为此任务使用反向引用。

Backreferences match the same text as previously matched by a capturing group.

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

解决方法是使用块构建动态正则表达式模式并使用 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/>";
}