Multiline encontra e substitui o wrapper com o curinga dentro

0

Estou tentando colocar um wrapper em torno de vários campos que já existem.

Eu quero converter isso:

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

Para isso:

<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>

Eu sou muito verde com a Regex, mas aqui está o closet que cheguei até correspondendo ao padrão :

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

Em seguida, poderia substituir por algo assim:

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

Mas isso obviamente não funciona. Mas a ideia seria envolver o valor correspondente.

Quando uso a substituição no Notepad ++, ela é substituída pela string (.|\r\n)*?(</div>) em vez do valor correspondente.

Posso fazer uma pesquisa e substituição de curinga que persista o valor correspondente do caractere curinga original?
Ou de alguma forma, embrulhar o conteúdo de outra maneira?

Nota : Estou usando o Notepad ++, mas gostaria de usar qualquer outro editor de texto com esse tipo de funcionalidade.

    
por KyleMit 18.09.2014 / 23:00

1 resposta

0

Você pode fazer isso com o mecanismo de substituição regex, que é exposto através do recurso Localizar e substituir no bloco de notas. Mas primeiro, você precisa conhecer um pouco como qualquer regex é capaz de encontrar e substituir texto.

Algumas Info Regex

Capturando grupos :

  • (ABC) - capturando grupo - Agrupa vários tokens juntos e cria um grupo de captura
  • (?:ABC) - grupo sem captura - agrupa os tokens juntos sem criar um grupo de captura
  • \n - referência anterior - Corresponde aos resultados de um grupo de captura anterior (ex. )

Símbolos de substituição :

  • $& - correspondência : insere todo o texto correspondente.
  • $n - grupo de captura #n - Insere os resultados do grupo de captura especificado (ex. $1 )

Como envolver com a substituição de regex

Para quebrar qualquer texto, primeiro, primeiro, uma consulta de expressão regular para encontrá-lo. Em seguida, substitua essa sequência inteira por uma nova composta pelo texto que você deseja incluir e o texto original correspondente usando $& .

Aqui está uma demonstração em RegExr :

VejaumexemplocomJavaScript:

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

Para envolver toda a consulta regex com uma substituição

Como inserir com a substituição de Regex

Aqui está uma demonstração em RegExr :

VejaumexemplocomJavaScript:

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

O problema na mão

Sabendo de tudo isso, o problema em mãos no Bloco de Notas (ou em qualquer outro lugar) deve parecer bastante trivial:

Aqui está uma demonstração em RegExr :

Pesquisa de : <div class="editor-label">((.|\n)*?(<\/div>)){2,2}
Substituir por : <div class="field-group">\n$&\n</div>

Você pode acessar o Localizar e substituir por Ctrl + H

Note: Remember to set the search mode as Regular Expression and also that notepad typically requires \r\n to find a newline instead of just \n

    
por 18.12.2014 / 23:14