2012-10-19 46 views
2

我正在使用此正則表達式 - [^\s\da-zA-ZåäöÅÄÖ]+$過濾除A-Z,0-9以及瑞典字符ÅÄÖ之外的任何內容。只要字符串沒有以空格結尾,它就會按預期工作,並且我對我需要正確的字符有點困惑,即使它們以空格結尾也會使其接受字符串。 \s在那裏,但顯然是不夠的。爲什麼當字符串以空格結尾時,我的正則表達式不起作用?

我的正則表達式有什麼問題?

"something #¤%&/()=?".replace(/[^\s\da-zA-ZåäöÅÄÖ]+$/, '') # => a string 


"something ending with whitespace #¤%&/()=? ".replace(/[^\s\da-zA-ZåäöÅÄÖ]+$/, '')# => a string ending with space #¤%&/()=? 

回答

2

您使用的是否定字符類(「什麼是空格,數字,字母等」),因此您的正則表達式匹配失敗。

從中刪除\s,還有$(它將匹配與字符串的末尾相關聯),它應該可以工作。

如果你想保留空間裏面的字符串,並只在結尾處,刪除它們,使用

"something with whitespace #¤%&/()=? ".replace(/[^\s\da-zA-ZåäöÅÄÖ]+|\s+$/g, '') 

結果:

something with whitespace 
+0

我不小心刪除了我的評論。謝謝! – Industrial

2

你的正則表達式表示:「相匹配的一個或多個實例字符而不是在以下範圍內,後接字符串尾部「。這基本上意味着你的正則表達式將只匹配出現在字符串末尾的不允許字符序列。由於您的測試字符串以邏輯所允許的空格結尾,因此沒有'字符串末尾出現'不允許的字符序列',因此正則表達式不匹配任何內容。

你可以達到你想要的篩選,如果你從正則表達式的末尾刪除$,轉而使用g標誌,使其在全球更換任何不在指定的字符範圍與空字符串。

如果您還想修剪尾隨空格,最好使用另一個正則表達式或更簡單的trimRight調用。

+0

+1以獲得很好的解釋。 – Industrial

相關問題