你可以在JS正则表达式中向前引用命名的捕获组吗?



所以我想用regex (JS风味)做的事情本质上是用双字母匹配单词(即同一字符的两个实例,直接相邻),但只捕获第二个字母。例如,我想捕获letter中的第二个t,manner中的第二个n,glass中的第二个s

我想到的方法是对一个命名的捕获组进行反向引用,我称之为ditto。所以在这种情况下,正则表达式将是/(?:k<ditto>)(?<ditto>t|n|s)/g

但是这最终匹配字符串它不应该有,即字符串只有一个t,ns-即,它匹配的是完全一样的东西作为/[tns]/g-我刚刚发现这是因为k不能反向引用一个<ditto>匹配还没有找到,所以第一个捕获组可能只是空的。

所以我实际上需要的是前向引用,而不是后向引用,但是那些。不存在,对吧?那你还能怎么做呢?

在这两个事件周围使用捕获组。然后,您可以将其中一个复制到替换文件中以保留它,同时替换另一个。

string.replace(/([tns])(1)/g, "X$2"); // replace first with X
string.replace(/([tns])(1)/g, "$1X"); // replace second with X

最新更新