JavaScript正则表达式替换 - 为什么一个工作,但另一个不工作?

时间:2013-03-13 03:27:22

标签: javascript regex replace

我从另一个网站获取以下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,'');

第一替换似乎包含在第二替换中。有人可以向我解释为什么第二行本身并不起作用。感谢。

2 个答案:

答案 0 :(得分:2)

第一种和第二种模式完全不同。模式1替换\ u00B7,而第二模式替换模式中未列出的所有字符。从图案2中删除克拉,这应该可以解决您的问题。

答案 1 :(得分:0)

要明确:

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

匹配集合中的所有字符。因此要匹配\ u00B7(并将其替换为''),请将其从模式中删除:

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

ASCII字符集在http://www.asciitable.com/给出,可能是您要保留的集合。范围\ u0020- \ u007E涵盖了大部分感兴趣的常见集合,其他通常不需要。

\ u000D是一个回车,我会调查你是否真的需要u00A2,u00A3和u00A4。