Для этого вам понадобится функция заменителя. Совпадение \(
, за которым следует \)
, ИЛИ совпадение <=
. Если круглые скобки были сопоставлены, замените все совпадения (чтобы сохранить то, что находится внутри скобок без изменений), в противном случае замените совпадение <=
на &le
:
const input = String.raw`<= \( <= \) <= \( <= \) <= \( <= \)`;
const output = input.replace(
/\\(.*?\\)|<=/g,
match => match === '<=' ? '&le' : match
);
console.log(output);
\\(.*?\\)|<=
означает совпадение либо:
\\(
- Буквальный обратный слеш, за которым следует (
.*?
- любые символы, пока не встретятся
\\)
- Буквальный обратный слеш, за которым следует )
ИЛИ соответствует
(если бы двигатель JS был более продвинутым, это было бы возможно без функции замены, например, \\(.*?\\)(*SKIP)(*FAIL)|<=
, но JS не поддерживает это)
Будьте осторожны при использовании lookbehind в Javascript - это поддерживают только очень новые браузеры. Многие старые браузеры не могут понять это и будут выдавать ошибки. Лучше по возможности избегать использования видимости, по крайней мере, в обозримом будущем, если вы хотите, чтобы ваш сайт работал для максимально возможного числа посетителей.