带有通配符的多行查找和替换包装器

带有通配符的多行查找和替换包装器

我正在尝试将一些已经存在的字段包装起来。

我想转换这个:

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

我对正则表达式还很陌生,但这是我目前为止最接近的匹配模式

<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

您可以使用正则表达式替换引擎来执行此操作,该引擎通过记事本中的“查找和替换”功能显示。但首先,您需要熟悉任何正则表达式如何查找和替换文本。

一些正则表达式信息

捕获组

  • (ABC)-捕获组- 将多个 token 组合在一起并创建一个捕获组
  • (?:ABC)-非捕获组- 将 token 分组在一起没有创建捕获组
  • \n-反向引用- 匹配前一个捕获组的结果(例如\1

替代符号

  • $&-匹配- 插入整个匹配的文本。
  • $n-捕获组 #n- 插入指定捕获组的结果(例如$1

如何使用正则表达式替换进行包装

要换行任何文本,首先使用正则表达式查询找到它。然后使用 将整个字符串替换为由您想要换行的文本和原始匹配文本组成的新字符串$&

这是一个RegExr 中的演示

文字换行

这是一个JavaScript 示例

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

用替换包装整个正则表达式查询


如何使用正则表达式替换进行插入

这是一个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

相关内容