Регулярные выражения в JavaScript довольно новы.На момент написания статьи поддерживается только в V8 (в Chrome, Chromium, Brave ...), но не в других движках.
Есть много вопросов с ответами здесь о том, как обойти, не имея взгляда сзади, например этот .
Эта статья Стивена Левитана также показывает способы обойти отсутствие функции.
Я хочу заменить каждое 'i', которое НЕ следует / не следует за любым другим i, и заменить его на 'z`
Это довольно легко обойтись безили lookahead или lookbehind, используя заполнители и группу захвата.Вы можете захватить то, что следует за i
:
const rex = /i(i+|.|$)/g;
... и затем условно заменить его, если то, что было захвачено, не является i
или серией i
s:
const result = input.replace(rex, (m, c) => {
return c[0] === "i" ? m : "z" + c;
});
Live Пример:
const rex = /i(i+|.|$)/g;
function test(input, expect) {
const result = input.replace(rex, (m, c) => {
return c[0] === "i" ? m : "z" + c;
});
console.log(input, result, result === expect ? "Good" : "ERROR");
}
test("i", "z");
test("iki", "zkz");
test("iiki", "iikz");
test("ii", "ii");
test("iii", "iii");