我可以使用正则表达式捕获组来防止该组的连续匹配吗?
Can I use a regex capturing group to prevent successive matches of that group?
我写了一个Javascript 基于正则表达式的解释器。是否可以使用捕获组来防止后续匹配评估任何先前捕获的匹配。
示例:
我从一个字符串 X
开始。这里有两个替换规则:
X: 'F-[[X]+X]+F[+FX]-X'
F: 'FF'
通过 0:
X
替换为 F-[[X]+X]+F[+FX]-X
。由于 F
不在初始字符串中,因此将被忽略。
pass 1:这里是我想使用捕获组策略的地方。
我首先替换了 4 X
s。现在,我如何忽略这些匹配 - 大概使用捕获组 - 并且只评估字符串的其余部分?
改用带有替换函数的单个正则表达式,将 x
s 替换为所需的 x
替换,将 f
s 替换为所需的 f
替换, 所以他们一次就完成了,不需要搞乱捕获组:
const replacements = {
X: 'F-[[X]+X]+F[+FX]-X',
F: 'FF'
};
const doReplace = str => str.replace(/[XF]/g, match => replacements[match]);
const r1 = doReplace('X');
const r2 = doReplace(r1);
console.log(r1);
console.log(r2);
我写了一个Javascript 基于正则表达式的解释器。是否可以使用捕获组来防止后续匹配评估任何先前捕获的匹配。
示例:
我从一个字符串 X
开始。这里有两个替换规则:
X: 'F-[[X]+X]+F[+FX]-X'
F: 'FF'
通过 0:
X
替换为 F-[[X]+X]+F[+FX]-X
。由于 F
不在初始字符串中,因此将被忽略。
pass 1:这里是我想使用捕获组策略的地方。
我首先替换了 4 X
s。现在,我如何忽略这些匹配 - 大概使用捕获组 - 并且只评估字符串的其余部分?
改用带有替换函数的单个正则表达式,将 x
s 替换为所需的 x
替换,将 f
s 替换为所需的 f
替换, 所以他们一次就完成了,不需要搞乱捕获组:
const replacements = {
X: 'F-[[X]+X]+F[+FX]-X',
F: 'FF'
};
const doReplace = str => str.replace(/[XF]/g, match => replacements[match]);
const r1 = doReplace('X');
const r2 = doReplace(r1);
console.log(r1);
console.log(r2);