Я пытаюсь заменить 2% на ''(пусто), используя концепцию регулярного выражения. Если входная строка имеет вид % или 2%, ее следует заменить на ''(пусто):
const str = "2%";
console.info(`2%`.replace(/^\d%$|\d(?=%)/, ''));
console.info(`2%`.replace(/\d(?=%)|^\d%$/, ''));(a|b) Matches the a or the b part of the subexpression.
"2%".replace(/^\d%$|\d(?=%)/, ''). Это хорошо работает.
Но "2%".replace(/\d(?=%)|^\d%$/, '') нет.
Левая часть | совпадает, вот что заменено. Что именно здесь удивительно?
@Pointy, это работает как оператор короткого замыкания?
Да, первая совпавшая альтернатива "выигрывает".



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Разница в том, что регулярное выражение пытается сопоставить в первую очередь. Левое выражение имеет приоритет. Правый пробуется только тогда, когда левый не совпадает.
Так в чем ваш вопрос и проблема? Похоже, у вас есть рабочий исходный код....