簡體   English   中英

將 JavaScript 中的多個 \n 替換為 1

[英]Replace multiple \n with 1 in JavaScript

如何用一個替換多個\n 所以如果用戶輸入

blah 

blahdy blah



blah blah

我希望它最終看起來像。

blah
blahdy blah
blah blah

我知道我可以用 while() 循環,但寧願使用正則表達式,因為我相信它更有效。

這對我有用:

string = string.replace(/\n+/g, '\n');

正如其他人所說,它將每次出現的一個或多個連續換行符( \n+ )替換為一個。

g影響“全局”替換,這意味着它替換字符串中的所有匹配項,而不僅僅是第一個匹配項。

編輯:如果你想考慮其他操作系統的行結尾 styles 以及(例如, \r\n ),你可以做一個多步驟替換:

string = string.replace(/(\r\n)+/g, '\r\n') // for Windows
    .replace(/\r+/g, '\r')                  // for Mac OS 9 and prior
    .replace(/\n+/g, '\n');                 // for everything else

或者(感謝Renesis的這個想法):

string = string.replace(/(\r\n|\r|\n)+/g, '$1');

如果您事先知道您正在處理什么樣的文本,那么上面的內容可能有點矯枉過正,因為它帶來了明顯的性能成本。

只需使用字符 class 將一個或多個\n\r替換為單個\n

var newString = oldString.replace(/[\n\r]+/g, "\n");

測試 HTML:

<script>
function process(id) {
    var oldString = document.getElementById(id).value;
    var newString = oldString.replace(/[\n\r]+/g, "\n");
    return newString;
}
</script>
<textarea id="test"></textarea>
<button onclick="alert(process('test'));">Test</button>

請注意:在現代 web 和大多數現代應用程序中,單個\n行結尾被優雅地處理,這就是我在這里使用它作為替換字符串的原因。 但是, CR+LF ( \r\n ) 操作系統上的一些更原始的應用程序將顯示所有文本一起運行而沒有完整的\r\n ,在這種情況下,您可以使用Dan Tao 的答案,它提供了保留行尾的解決方案,或以下,在一次調用中完成類似的事情:

string.replace(/(\r\n|\r|\n)+/g, "$1");
var blah = "blah\n\nblahdy blah\n\n\n\nblah blah\n";
var squeezed = blah.replace(/\n+/g, "\n");

您可以使用正則表達式

xx.replace(/\n+/g, "\n");

或者沒有 JavaScript 引擎設置有限 state 機器來運行正則表達式的開銷,您可以使用 arrays 來完成:

s = s.split("\n").join("");

對帶有詳細示例的空格執行相同操作: Regex to replace multiple spaces with a single space 例子:

var str = "The      dog        has a long tail,      and it is RED!";
str = str.replace(/ {2,}/g,' ');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM