![](/img/trans.png)
[英]Javascript regular expression to remove characters from the end of a string
[英]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, "");
編輯:刪除三種類型的換行符。
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.