Как заменить все пробелы между кавычками, которые начинаются с указанной строки c с подчеркиванием в VSCode? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть следующая строка:

this is a sample id="aaa bbb ccc" name="abc abc"

Я хочу сопоставить только пробел между кавычками, которые начинаются со строки "id =", и заменить все вхождения подчеркиванием. Результирующая строка должна выглядеть следующим образом:

this is a sample id="aaa_bbb_ccc" name="abc abc"

Следующее регулярное выражение сопоставляет все пробелы между кавычками, но не учитывает тот факт, что кавычкам должен предшествовать "id ="

\s(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$)

Кавычки внутри кавычек невозможны.

1 Ответ

1 голос
/ 23 апреля 2020

Поскольку начиная с VS Code 1.31, поддерживаются виды с бесконечной шириной , вы можете использовать

(?<=\bid="[^"]*?)\s

или убедиться, что на самом деле равно a " после пробела

(?<=\bid="[^"]*?)\s(?=[^"]*")

Заменить на _.

См. Демонстрационную версию regex онлайн . Подробности:

  • (?<=\bid="[^"]*?) - положительный вид сзади, который соответствует местоположению, которому непосредственно предшествует
    • \b - граница слова
    • id=" - a литерал id=" строка
    • [^"]*? - любые 0 или более символов, кроме ", как можно меньше (из-за *? не жадного квантификатора)
  • \s - пробел
  • (?=[^"]*") - положительный прогноз, соответствующий местоположению, за которым сразу следуют любые 0+ символов, кроме " (с шаблоном [^"]*), а затем ".

См. Доказательство того, что он работает в VSCode:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...