Javascript RegEx положительный взгляд не работает, как ожидалось

1

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

Test String asdf.wakawaka asdf.waka df.waka [df.waka(df.waka _df.waka {df,waka

RegEx (?=[^\w])df\.

Заменяющая строка kkk.

Ожидаемый результат asdf.wakawaka asdf.waka kkk.waka [kkk.waka(kkk.waka _df.waka {df,waka

Но регулярное выражение выше dos не находит никакого совпадения, поэтому оно ничего не заменяет в результате и дает исходную тестовую строку в результате.

Без положительного взгляда (пропустить первую стратегию персонажа) это соответствует моему требованию. см. пример соответствия регулярному выражению regex101.com

С положительным взглядом, дающим неожиданные результаты регулярного выражения с положительным взглядом aheah на regex101.com

Заранее благодарю за любую помощь.

  • 1
    Нравится ЭТО ?
  • 0
    Правильно @Gurman, это именно то, что я пропустил.
Теги:
regex-lookarounds

1 ответ

1
Лучший ответ

Использование [^\w] означает, что вы хотите совместить и использовать символ, отличный от символа слова, перед матчем, который требуется заменить.

Однако этот символ потребляется, и вы не можете его восстановить, не забирая его первым. Вы можете использовать подход Гурмана для соответствия /(^|\W)df\./g и заменить на '$1kkk. , но вы также можете использовать границу слова:

\bdf\.

См. Демо-версию regex

JS demo:

var s = "asdf.wakawaka asdf.waka df.waka [df.waka (df.waka _df.waka {df,waka";
console.log(
  s.replace(/\bdf\./g, 'kkk.')
);

Однако, если вы не хотите заменять df. в начале строки, используйте

var s = "df. asdf.wakawaka asdf.waka df.waka [df.waka (df.waka _df.waka {df,waka";
console.log(
  s.replace(/(\W)df\./g, '$1kkk.')
);
  • 1
    Это объясняет, почему я не могу заставить свое регулярное выражение работать. Я принимаю ответ, поскольку он решает проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню