2012-04-02 53 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,'.'); 
    

    (这种方法的缺点是显而易见的)

你可以试试上面结合的混合方法,但你永远不会完美。 : -/