【发布时间】:2021-07-31 07:38:31
【问题描述】:
所以我试图用正则表达式(JS 风格)做的事情本质上是匹配带有双字母的单词(即相同字符的两个实例,彼此直接相邻),但只捕获第二个字母。例如,我想在letter 中捕获第二个t,在manner 中捕获第二个n,在glass 中捕获第二个s。
我想通过反向引用一个命名的捕获组来解决这个问题,我称之为ditto。所以在这种情况下,正则表达式将是/(?:\k<ditto>)(?<ditto>t|n|s)/g...
...但是这最终匹配了它不应该匹配的字符串,即只有一个 t、n 或 s 的字符串 - 即,它与与/[tns]/g 相同 - 我刚刚发现这是因为\k 无法反向引用尚未找到的<ditto> 匹配项,因此第一个捕获组可能只是空的。
所以我真正需要的是前向引用,而不是后向引用,但那些......不存在,是吗?那你还怎么做同样的事情呢?
【问题讨论】:
-
捕获第一个或第二个字母有什么区别,因为它们是相同的?
-
@Barmar 因为它随后是字符串操作,以用不同的子字符串替换捕获的任何内容,并且我需要“在另一个 X 之前/之后用 Y 替换所有 X 实例”的功能。反向引用适用于“后跟 X”,但不适用于“先于 X”,两个字母中的哪一个匹配很重要,因为输出字符串“XY”不能与“YX”互换。
标签: javascript regex