Я пытаюсь обернуть кучу полей, которые уже существуют.

Я хочу преобразовать это:

<div class="editor-label">
    @Html.LabelFor(Function(model) model.FirstName)
</div>
<div class="editor-field">
    @Html.EditorFor(Function(model) model.LastName)
</div>

К этому:

<div class="field-group">
    <div class="editor-label">
        @Html.LabelFor(Function(model) model.FirstName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(Function(model) model.LastName)
    </div>
</div>

Я довольно зеленый с Regex, но вот шкаф, который я так далеко дошел до соответствия по шаблону:

<div class="editor-label">(.|\r\n)*?(</div>)(.|\r\n)*?(</div>)

Тогда это может заменить что-то вроде этого:

<div class="field-group"><div class="editor-label">(.|\r\n)*?(</div>)(.|\r\n)*?(</div>)</div>

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

Когда я использую замену в Notepad++, он заменяет ее строкой (.|\r\n)*?(</div>) вместо соответствующего значения.

Можно ли выполнить поиск с подстановочными знаками и заменить их, сохраняя исходное значение с подстановочными знаками?
Или как-то обернуть содержимое по-другому?

Примечание: я использую Notepad++, но я бы с удовольствием использовал любой другой текстовый редактор, который имеет такую функциональность.

1 ответ1

0

Вы можете сделать это с помощью механизма подстановки регулярных выражений, который открывается с помощью функции «Найти и заменить» в блокноте. Но сначала вы должны быть немного знакомы с тем, как любое регулярное выражение может найти и заменить текст.

Некоторая информация о регулярных выражениях

Захват групп:

  • (ABC) - группа захвата - группирует несколько токенов и создает группу захвата
  • (?:ABC) - группа без захвата - группирует токены без создания группы захвата
  • \n - обратная ссылка - сопоставляет результаты предыдущей группы захвата (например, \1)

Символы замещения:

  • $& - match - вставляет весь сопоставленный текст.
  • $n - группа захвата #n - вставляет результаты указанной группы захвата (например, $1)

Как обернуть с помощью Regex Substitution

Чтобы обернуть любой текст, сначала направьте запрос регулярного выражения, чтобы найти его. Затем замените всю эту строку новой строкой, состоящей из текста, который вы хотите обернуть вокруг него, и исходного сопоставленного текста, используя $& .

Вот демоверсия в RegExr:

Обтекание текстом

Вот пример с JavaScript:

var wrapMe = 'WrapMe';
var wrapped = wrapMe.replace(/WrapMe/g, "<wrapper> $& </wrapper>");
console.log(wrapped); // <wrapper> WrapMe </wrapper>

Обернуть весь запрос регулярных выражений подстановкой


Как вставить с подстановкой Regex

Вот демоверсия в RegExr:

Вставить текст

Вот пример с JavaScript:

var insertMe = '<wrapper>Replace</wrapper>';
var inserted = insertMe.replace(/(<wrapper>).*(<\/wrapper>)/g, "$1 Inserted $2");
console.log(inserted); // <wrapper> Inserted </wrapper>

Проблема под рукой

Зная все это, проблема под рукой в Блокноте (или где-либо еще) должна казаться довольно тривиальной:

Вот демоверсия в RegExr:

Поиск: <div class="editor-label">((.|\n)*?(<\/div>)){2,2}
Заменить на: <div class="field-group">\n$&\n</div>

Вы можете нажать «Найти и заменить» с помощью Ctrl + H

Скриншот проблемы

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .