0

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

第一次替换似乎包含在第二次替换中。有人可以向我解释为什么第二行不能单独工作。谢谢。

4

2 回答 2

2

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

于 2013-03-13T03:41:36.430 回答
0

只是要清楚:

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

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

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

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

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

于 2013-03-13T05:10:27.077 回答