2012-04-02 58 views
0

我用下面的正則表達式特殊字符轉義:不同語言的特殊字符轉義

var searchForTest = text.replace(/[^a-zA-Z 0-9.]/gi,'.'); 

這正常工作時的文字是英文,但失敗時,我試圖highligh希臘字符,因爲它們被識別作爲特殊字符。工作示例的

例:非工作示例的English Characters

Greek Characters

感謝

+0

通過「轉義」它看起來像你的意思是「垃圾」 – Quentin 2012-04-02 13:21:21

+0

我不搗毀特殊字符。我用一個點代替它們。' – glarkou 2012-04-02 13:22:46

+1

如果你逃脫了它們,那麼這個過程可能會顛倒過來。 – Quentin 2012-04-02 13:23:49

回答

2

當你處理,你應該使用unicode序列,而不是希臘的符號。
由於希臘符號are in range \u0374 - \u03FF只是添加此範圍到你的正則表達式

var searchForTest = text.replace(/[^a-zA-Z 0-9.\u0374-\u03FF]/gi,'.'); 
+0

非常感謝。這真的很有幫助。再次感謝! – glarkou 2012-04-02 13:36:50

0

JavaScript的正則表達式沒有統一的任何真正的理解;也就是說,沒有Unicode感知的字符類,如「字母」或「數字」(只有「ASCII字母數字字符」),沒有辦法引用Unicode屬性等。所以基本上有兩種選擇:

  • 匹配任何ASCII字符,這不是在你的特殊子集:(這具有不會承認捲曲引號,具體希臘標點符號等,特殊字符下行)

    var searchForTest = text.replace(/(?=[\x20-\x7E])[^a-zA-Z 0-9.]/gi,'.'); 
    

  • 匹配任何不在你的字符pecial子集,並加入希臘和其他字符,你需要他們:

    var searchForTest = text.replace(/[^a-zA-Z 0-9.α-ωΑ-Ω]/gi,'.'); 
    

    (這種方法的缺點是顯而易見的)

你可以試試上面結合的混合方法,但你永遠不會完美。 : -/