2012-09-09 39 views

回答

25

您可以使用正則表達式

myString.replace(/[^\w\s!?]/g,''); 

這將取代一切,但一個字字符,空間,感嘆號或問題。

Character Class\w代表 「單詞字符」,通常[A-Za-z0-9_]。注意包含下劃線和數字。

\s代表「空白字符」。它包括[ \t\r\n]

如果你不想要下劃線,你可以只使用[A-Za-z0-9]

myString.replace(/[^A-Za-z0-9\s!?]/g,''); 

對於unicode字符,可以在表達式中添加類似\u0000-\u0080之類的內容。這將排除該unicode範圍內的所有字符。您必須指定不需要要刪除的字符的範圍。您可以在Unicode Map上查看所有代碼。只需添加您想要保留的字符或一系列字符。

例如:

myString.replace(/[^A-Za-z0-9\s!?\u0000-\u0080\u0082]/g,''); 

這將允許前面提到的所有字符,從\u0000-\u0080\u0082的範圍內。它將刪除\u0081

+0

只是一個想法,但不是也留下了下劃線字符? –

+0

和感嘆號?它確實刪除了國際信件... –

+0

@tomaszs我更新瞭解決該問題的答案。 – sachleen

1

您可以用正則表達式喜歡嘗試:var cleaned = someString.replace(/[^a-zA-Z0-9! ]+/g, "");

+0

我想你從正則表達式的'g'標誌。 – jfriend00

+0

Ops ...謝謝,我編輯了答案。 – rcdmk

3

這兩個答案發布到目前爲止留在問號。我會對他們發表評論,但還沒有足夠的代表。

David是正確的,sachleen的正則表達式會在後面留下下劃線。 rcdmk的正則表達式,修改如下,會做的伎倆,但如果你關心國際字符事情可能會變得更加複雜。

var result = text.replace(/[^a-zA-Z0-9\s!?]+/g, ''); 

這會留下新的行和標籤以及空格。如果你想擺脫的新行和製表符,以及,將其更改爲:

var result = text.replace(/[^a-zA-Z0-9 !?]+/g, ''); 
+0

* *現在*,你*可以*發表評論! =) –

+0

大聲笑,謝謝! :) – Kelvin

+0

請記住,雖然:偉大的力量來很好... *哦,閃亮!* –

2
text = "A(B){C};:a.b*!c??!1<>[email protected]#3" 
result = text.replace(/[^a-zA-Z0-9]/g, '') 

應該返回ABCabc123

首先,我們定義文本A B C a b c 1 2 3但隨機字符 集result爲:

text.replace(...)其中參數爲:

/.../g/.../^表示反轉;不去除它們是字母:

a-z(小寫字母),A-Z(大寫字母)和0-9(位)

g意味着全球性的,以去除所有比賽不只是第一比賽

第二個參數是替換字符,我們本身將其轉換爲空字符串,以便它保留指定的字符串。如果指定,它會返回此:"A B C a b c 1 2 3"

相關問題