2015-02-07 34 views
1

說我有一個字符串:地帶的所有尾隨空白,除了最後一個新行

var str = 'I am a \nmultiline \nString.\n' 

我怎麼能代替所有的尾部空格與'',除了最後\n

我曾嘗試:

str.replace(/\s+$/gm, '') 

但返回

"I am a\nmultiline\nString." 

,我想有像

"I am a\nmultiline\nString.\n" 
+1

它會在最後總是換行嗎?如果它沒有換行符,你想添加一個嗎? – Barmar 2015-02-07 01:27:03

回答

0

\s匹配換行符也。所以我建議你使用下面的內容。

str.replace(/[ \t]+$/gm, "") 

OR

str.replace(/(?:(?![\r\n])\s)+$/gm, "") 

m多修飾符是必須的,當您正則表達式使用錨。上述正則表達式匹配最後一個或多個空格字符,但不匹配換行符或回車符。

例子:

> var str = 'I am a \nmultiline \nString.\n'; 
undefined 
> str.replace(/[ \t]+$/gm, "") 
'I am a\nmultiline\nString.\n' 
+0

感謝您的回答,但我想刪除除\ n之外的所有空格字符,而不僅僅是''和'\ t',我使用了我的答案(參見上文)。 – 2015-02-07 01:36:43

+0

我選擇這個作爲@ hwnd的答案的正確答案,雖然簡短,不起作用(請參閱我的評論)。即使添加了一個組,它也與這個答案相似,因爲它使用了一個更清晰的非捕獲組。 – 2015-02-07 01:59:58

+0

小修正:m標誌是多行,不是乘數。而不是讓^和$表示字符串的開始和結束,它意味着行的開始和結束。 – 2015-02-07 03:38:29

0

我結束了使用@ AvinashRaj的回答的一個變種,因爲我想(再次,除了\n)移除所有的空格,不只是\t

str.replace(/[ \f\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​\u202f\u205f​\u3000]+$/gm, '') 

(From MDN

+0

看到我的更新.. – 2015-02-07 01:40:22

+0

@AvinashRaj謝謝。這是一個更清潔。 – 2015-02-07 02:02:14

相關問題