0

我开发了一个 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','');

我怎样才能建立这种模式?

4

1 回答 1

1

作为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}'). 但是,请注意,像您正在做的那样简单地删除标记并不是删除变音符号的安全方法。通常,您尝试做的是一个坏主意,应该避免,因为它通常会导致错误或难以理解的结果。

于 2012-09-23T15:00:45.650 回答