如何使用正则表达式用新行或 CR/LF 替换文本?

问题描述 投票:0回答:1

我使用 Phoenix Code(基于 Brackets 的编辑器)作为文本编辑器,但这是正则表达式中的搜索、替换和换行的更普遍问题。

我经常会有几段文本想要删除多余的 CR/LF,例如:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. 


Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo.


In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt.

正则表达式搜索和替换功能让我可以搜索两个回车符 - 我只使用

[\r\n]{2}
。十分简单。但我不知道如何用单个 CR/LF 替换它们

如果我使用

\r\n
[\r\n]
或任何其他变体,它只会用这些文字字符替换我的搜索文本。我已经尝试了所有我能想到的组合。

如何使用正则表达式搜索字符串(任何字符串)并将其替换为回车符和换行符?

感谢您的帮助!

PS:Notepad++ 具有“扩展”搜索/替换功能,让我可以使用 ' ' 在替换框中,但如果可能的话,我不想只为了这些搜索而切换到它。我希望能够在正则表达式中完成此操作,以便我可以在其他编辑器中使用它。

regex newline adobe-brackets
1个回答
0
投票

您可以使用

s/[\r\n]{2,}/\n/g
将连续换行符限制为一次。这会查找两个或多个回车符 (CR) 或换行符 (LF),然后用一个换行符替换它们。

这是一个使用 Javascript 的交互式演示:

function convert() {
  let pre = document.querySelector("pre");
  let button = document.querySelector("button");
  if (pre.old) {
    pre.innerHTML = pre.old;
    delete pre.old;
    button.textContent = "Convert";
  } else {
    pre.old = pre.innerHTML;
    pre.innerHTML = pre.innerHTML.replace(/[\r\n]{2,}/g, "\n");
    button.textContent = "Unconvert";
  }
}
pre { white-space: pre-wrap }
<button onclick="convert()">Convert</button>
<pre>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. 


Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo.


In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt.</pre>

这可以让您切换转换(它将原始内容保存在 pre.old 中,该内容保存在元素中)。它只是为

<pre>
文本和按钮设置变量,如果保存了旧内容则恢复,否则使用 String.prototype.replace() 执行替换。 CSS 只是确保文本换行。

© www.soinside.com 2019 - 2024. All rights reserved.