2013-03-13 19 views
0

我抓住下面的JavaScript正則表達式從其他網站替換來剔除一些無效字符:JavaScript正則表達式替換 - 爲什麼一個工作,但這其他不是?

str = str.replace(/[^\u000D\u00B7\u0020-\u007E\u00A2-\u00A4]/g,''); 

不過,我注意到它不要再追\ 00B7(在ISO-8859-1中心點字符的出現)。

如果我在兩個步驟做了但是,它的工作原理:

str = str.replace(/\u00B7/g,''); 
str = str.replace(/[^\u000D\u00B7\u0020-\u007E\u00A2-\u00A4]/g,''); 

首屆取代似乎包括在第二更換。有人可以向我解釋爲什麼第二行本身不起作用。謝謝。

+1

我不明白。你想要那個角色被替換嗎?如果你這樣做,只需從否定的字符類中移除它:'/ [^ \ u000D \ u0020- \ u007E \ u00A2- \ u00A4]/g' – 2013-03-13 03:42:04

回答

2

第一和第二模式完全不同。模式1取代了\ u00B7,而第二種模式取代了模式中未列出的所有字符。從模式2中刪除克拉,並應該解決您的問題。

+0

如果我從模式2中刪除克拉,會發生什麼情況是除去了所有內容對於一些控制字符。所有的好人物也被''取代。我承認我很困惑。但那就是發生了什麼事。 – 2013-03-13 04:28:31

+1

因爲'\ u0020- \ u007E'表示幾乎是[ASCII字符集](http://www.asciitable.com/)的所有字符範圍,包括所有字符a-z,A-Z和數字。所以只需從否定集中移除'\ u00B7',它就會被移除。 – RobG 2013-03-13 05:02:11

0

只是要清楚:

/[^\u000D\u00B7\u0020-\u007E\u00A2-\u00A4]/ 

比賽的所有字符在集不。因此,爲了匹配\ U00B7(並有將其與'代替),從模式中刪除:

/[^\u000D\u0020-\u007E\u00A2-\u00A4]/ 

ASCII字符集在http://www.asciitable.com/給出,可能是要保持在設定的。範圍\ u0020〜\ u007E涵蓋了大多數感興趣的通用設置,其他通常不需要。

\ u000D是回車,我會調查你是否真的需要u00A2,u00A3和u00A4。

+0

雖然我不想扔掉非ASCII字符,例如那些使用諸如斯瓦希里語或泰語等外語的字符。不是說外語有很多內容,但仍然是UTF-8。 – 2013-03-13 08:36:07

+0

OP中的模式將丟棄除\ u00A2- \ u00A4(¢£)範圍內的三個以外的所有非ASCII字符,因此您已經排除了幾乎所有非英文字符。 – RobG 2013-03-13 09:22:13

+0

嗯..我真的想做的只是排除在XML 1.0中導致驗證錯誤的字符。 – 2013-03-13 13:18:32

相關問題