簡體   English   中英

JavaScript:如何使用正則表達式從字符串中刪除空行?

[英]JavaScript: how to use a regular expression to remove blank lines from a string?

我需要使用 JavaScript 刪除 HTML 文本框中的空行。 空行可以位於textarea元素中的任何位置。 空行可以只是一個回車或空格加回車。

我期待正則表達式解決方案。 以下是我嘗試過的一些方法,但它們不起作用,無法弄清楚原因:

/^\s*\r?\n/g   

/^\s*\r?\n$/g

編輯 1

看來 aaronman 和 m.buettner 建議的解決方案(我稍微修改了一下)有效:

string.replace(/^\s*\n/gm, "") 

有人能說出為什么我的第一個正則表達式不起作用嗎?

編輯 2

在閱讀了所有有用的答案后,我想出了這個:

/^[\s\t]*(\r\n|\n|\r)/gm

這將是一種涵蓋所有情況的方法嗎?

編輯 3

這是涵蓋所有空間(空格、制表符)和平台(Linux、Windows、Mac)的最簡潔的一種。

/^\s*[\r\n]/gm

非常感謝 m.buettner!

您的模式似乎沒問題,您只需要包含多行修飾符m ,以便^$匹配行的開頭和結尾:

/^\s*\n/gm

沒有m ,錨只匹配字符串的開頭和結尾。

請注意,您錯過了 UNIX 樣式的行尾(僅\\r )。 在這種情況下,這將有所幫助:

/^\s*[\r\n]/gm

另請注意,(在這兩種情況下)您不需要顯式匹配\\n前面的可選\\r ,因為這是由\\s*

正如Dex在評論中指出的那樣,如果最后一行僅包含空格(並且后面沒有換行符),則它無法清除最后一行。 解決這個問題的一種方法是使實際的換行符可選,但在它之前包含一個行尾錨點。 在這種情況下,必須符合正確的結束,雖然該行:

/^\s*$(?:\r\n?|\n)/gm

我相信這會奏效

searchText.replace(/(^[ \t]*\n)/gm, "")

這應該可以解決我認為的問題:

var el = document.getElementsByName("nameOfTextBox")[0];
el.value.replace(/(\r\n|\n|\r)/gm, "");

編輯:刪除三種類型的換行符。

這是另一個解決方案

string = string.replace(/^(?=\n)$|^\s*|\s*$|\n\n+/gm, "")

它似乎處理空行和僅空格行。

function removeEmptyLine(text) {
  return text.replace(/(\r?\n)\s*\1+/g, '$1');
}

測試:

console.assert(removeEmptyLine('a\r\nb') === 'a\r\nb');
console.assert(removeEmptyLine('a\r\n\r\nb') === 'a\r\nb');
console.assert(removeEmptyLine('a\r\n \r\nb') === 'a\r\nb');
console.assert(removeEmptyLine('a\r\n \r\n  \r\nb') === 'a\r\nb');
console.assert(removeEmptyLine('a\r\n \r\n 2\r\n  \r\nb') === 'a\r\n 2\r\nb');
console.assert(removeEmptyLine('a\nb') === 'a\nb');
console.assert(removeEmptyLine('a\n\nb') === 'a\nb');
console.assert(removeEmptyLine('a\n \nb') === 'a\nb');
console.assert(removeEmptyLine('a\n \n  \nb') === 'a\nb');
console.assert(removeEmptyLine('a\n \n2 \n  \nb') === 'a\n2 \nb');

暫無
暫無

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

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