Манипулировать группой захвата регулярных выражений при замене в VSCode / Sublime

#regex #visual-studio-code #sublimetext3

#регулярное выражение #visual-studio-code #sublimetext3

Вопрос:

В моем файле Javascript я хочу заменить:

 var user1 = {id: 'Alan Banks'};
var user2 = {id: 'Chris Daily'};
  

с

 var user1 = {id: 'Alan_Banks'};
var user2 = {id: 'Chris_Daily'};
  

Я могу сопоставить имена пользователей со следующим регулярным выражением в VSCode, Sublime (и Dreamweaver тоже, от отчаяния):

 id: '(.*?)'
  

Таким образом, группа захвата $1 теперь содержит содержимое id свойства каждого пользователя.

Как я могу выполнить вторую часть моей операции, заменив пробелы в захваченной подстроке символами подчеркивания?

Ответ №1:

В коде Visual Studio вы можете использовать

Найти: (?<=id:s*'[^']*?)s(?=[^']*')
Заменить: _

Смотрите демонстрацию регулярных выражений. Подробные сведения:

  • (?<=id:s*'[^']*?) — положительный прогноз, соответствующий местоположению, которому непосредственно предшествует id: , 0 пробелов, ' , а затем любые 0 или более символов, кроме ' как можно меньшего количества
  • s — пробел
  • (?=[^']*') — положительный прогноз, который соответствует местоположению, за которым сразу следует 0 символов, отличных от ' и затем ' .

В Sublime Text 3, который поддерживает поиск и замену регулярных выражений PCRE, вы можете использовать

Найти: (?:G(?!A)|id:s*')[^'s]*Ks(?=[^']*')
Заменить: _

Смотрите другую демонстрацию регулярных выражений. Подробные сведения:

  • (?:G(?!A)|id:s*') — конец предыдущего соответствия или id: , 0 пробелов и '
  • [^'s]* — 0 символов, отличных от ' и пробелов
  • K — опускает весь текст, сопоставленный до сих пор
  • s — пробел
  • (?=[^']*') — положительный прогноз, который соответствует местоположению, за которым сразу следует 0 символов, отличных от ' и затем ' .

Комментарии:

1. Спасибо — как новичок в регулярных выражениях, дополнительные пояснения очень ценятся