有什么事情不记得反向引用中的最后一个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/