Могу ли я использовать группу захвата регулярных выражений для предотвращения последовательных совпадений этой группы?

Я написал интерпретатор Javascript на основе регулярных выражений. Можно ли использовать группы захвата, чтобы предотвратить последующее совпадение от оценки любых ранее захваченных совпадений.

Пример: я начинаю со строки X, Вот два правила замены:

X: 'F-[[X]+X]+F[+FX]-X'

F: 'FF'

пройти 0: X заменяется F-[[X]+X]+F[+FX]-X, поскольку F не находится в исходной строке, он игнорируется.

проход 1: здесь я хочу использовать стратегию захвата группы. Я сначала заменяю 4 Xs. Теперь, как мне игнорировать эти совпадения - предположительно с использованием групп захвата - и оценивать только оставшуюся часть строки?

1 ответ

Решение

Вместо этого используйте одно регулярное выражение с функцией заменителя, которое заменяет x с желаемым x замена, и f с желаемым 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);

Другие вопросы по тегам