我开发了一个javascript函数来清理一系列Unicode字符。例如,“ñeóñúa1.txt”=> “neonu a1.txt”。为此,我使用了正则表达式:
var = new RegExp patternA ("[\\u0300-\\u036F]", "g");
name = name.replace (patternA,'');
但它在IE中无法正常工作。如果我的研究是正确的,IE不会以相同的方式检测Unicode。我正在尝试使用与所有浏览器兼容的库XRegExp(http://xregexp.com/)创建一个等效函数,但我不知道如何编写Unicode模式以便XRegExp在IE中工作。
其中一个失败的尝试:
XRegExp.replace(name,'\\u0300-\\u036F','');
如何构建此模式?
答案 0 :(得分:0)
作为XRegExp.replace
方法的第二个参数提供的值应该是正则表达式对象,而不是字符串。正则表达式可以由XRegExp
或本地RegExp
构造函数构建。因此,以下两行是等效的:
name = name.replace(/[\u0300-\u036F]/g, '');
// Is equivalent to:
name = XRegExp.replace(name, /[\u0300-\u036F]/g, '');
但是,您编写的以下行无效:
var = new RegExp patternA ("[\\u0300-\\u036F]", "g");
相反,它应该是:
var patternA = new RegExp ("[\\u0300-\\u036F]", "g");
我不知道这是否是您问题的根源,但也许。为了记录,IE的Unicode支持与其他浏览器一样好或更好。
XRegExp可以让您通过名称识别您的块,而不是使用幻数。 XRegExp('[\\u0300-\\u036F]')
和XRegExp('\\p{InCombiningDiacriticalMarks}')
完全相同。但是,该块中的标记是所有组合标记的一小部分。您实际上可能希望匹配XRegExp('\\p{M}')
之类的内容。但是,请注意,简单地删除像您正在做的标记并不是一种安全的方法来删除变音符号。一般来说,你想要做的是一个坏主意,应该避免,因为它往往会导致错误或无法理解的结果。