Замена всех периодов в строке не работает - PullRequest
0 голосов
/ 20 декабря 2018

Я выполняю регулярное выражение в JavaScript, чтобы заменить периоды, которые не идут после цифр или перед символом фунта, на 4.Когда я ввожу i.t. в качестве ввода, он преобразует его в «i4t».Почему это происходит?

У меня есть шаблон

RegExp('([^\\d])[.]([^#])', "g")

Пример ввода: i.t.Ожидаемый результат: i4t4Фактический объем производства: i4t.

1 Ответ

0 голосов
/ 20 декабря 2018

Класс отрицательных символов [^#] соответствует и использует символ, который не является #.Таким образом, точка после t сопоставляется во время первой итерации, а второе совпадение не происходит.

Вы можете использовать

s.replace(/(^|\D)\.(?!#)/g, '$14')

См. Демонстрационный пример regex .

Подробности

  • (^|\D) - Группа захвата 1: либо начало строки (^), либо (|) любой символ другойчем цифра (\D) ( ПРИМЕЧАНИЕ : если . в начале строки не следует трогать, используйте (\D))
  • \. - точка
  • (?!#) - нет # разрешено сразу справа от текущего местоположения.

JS demo:

console.log(
  "i.t.".replace(/(^|\D)\.(?!#)/g, '$14')
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...