Как я могу сопоставить два соседних символа и заменить их, не сопоставляя все перестановки? - PullRequest
1 голос
/ 17 марта 2020

У меня есть строка, которая выглядит следующим образом:

"ABC 243 ADB"

Я хотел бы поместить да sh между каждыми двумя последовательными буквами, чтобы полученная строка выглядела как:

"A-B-C 243 A-D-B"

Чтобы сделать это, я могу искать все перестановки букв с помощью регулярных выражений (/ AA / g, / BB / g, / AB / g, ...), но это просто большая работа. До сих пор я мог сопоставить две последовательные буквы, но я не мог заменить эти совпадения на себя, кроме как с помощью sla sh между:

"ABC 243 A-D-B".replace(/(A|B|C|D)(A|B|C|D)/g,"what should I use here?")

Как я могу ссылаться на подстроки, с которыми я сопоставил поиск?

1 Ответ

0 голосов
/ 18 марта 2020

Чтобы вставить дефисы между каждой парой букв в строке, вы можете использовать

.replace(/([A-Za-z])(?=[A-Za-z])/g, '$1-')

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

Подробности

  • ([A-Za-z]) - группа захвата # 1: любая буква ASCII
  • (?=[A-Za-z]) - положительный прогноз (поскольку он не использует текст, он разрешает последовательные совпадения, позволяя регулярному выражению отметьте конечную букву как начальную букву последующего совпадения), для которой требуется буква ASCII справа от текущего местоположения.

Если вы хотите вставить дефисы только между A, B, C и D, вы можете использовать более конкретный c класс символов: замените [A-Za-z] на [ABCD] или просто [A-D] в приведенном выше примере:

.replace(/([A-D])(?=[A-D])/g, '$1-')

См. демоверсия JS:

console.log( "ABC 243 ADB FGH".replace(/([A-Za-z])(?=[A-Za-z])/g, '$1-') )
// => A-B-C 243 A-D-B F-G-H
console.log( "ABC 243 ADB FGH".replace(/([A-D])(?=[A-D])/g, '$1-') )
// => A-B-C 243 A-D-B FGH
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...