Javascript:在正则表达式中反向引用而不记得上一场比赛



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

(abc|def)=1 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

不能对此任务使用反向引用。

反向引用匹配的文本与

捕获组先前匹配的文本相同

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

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

最新更新