Javascript保留ASCII字符和货币符号

时间:2014-08-09 11:37:50

标签: javascript regex unicode

我正在尝试使用此正则表达式删除非ASCII字符+非货币符号

string.replace(/[^\x20-\x7E\p{Sc}]/g, '') 

事实证明货币符号正在被移除:(

2 个答案:

答案 0 :(得分:2)

根据this page JavaScript的原生正则表达式对象不支持Unicode类别(例如正则表达式模式中的{Sc}货币类别)。

您可以考虑使用第三方JavaScript库(例如on this page)来获得此功能。

答案 1 :(得分:0)

免责声明:我是XRegExp的撰稿人 - 我编写了生成Unicode插件数据的脚本。您确定要安装Unicode插件吗?


如果您只需要一个支持Unicode的正则表达式,那么您可能不想为此提供整个XRegExp库及其Unicode插件。另一种解决方案是使用构建脚本,使用Regeneratethe Unicode data packages编译正则表达式。

以下是Node.js中的内容:

var regenerate = require('regenerate');

// Symbol, Currency (Sc)
var Sc = require('unicode-7.0.0/categories/Sc/code-points');

// Let’s create a set for the symbol we want to remove.
var set = regenerate() // Start with an empty set.
  .addRange(0x7F, 0x10FFFF) // Add all Unicode code points outside of the ASCII range.
  .add(Sc) // Add all `Sc` code points.
// Print the result.
console.log(set.toString());

运行npm install regenerate unicode-7.0.0,然后按如下方式运行此脚本:

node generate-regular-expression.js

它将打印以下输出:

[\$\x7F-\uD7FF\uDC00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF]

这可以直接用作正则表达式文字的一部分。

这种方法的主要优点是,如果您想要在集合中添加或删除其他字符,则无需手动调整正则表达式。相反,您可以通过添加或删除某些符号来更改生成它的脚本,然后再次运行它。与任何正则表达式,恕我直言,脚本的代码更易读和可维护。此外,输出尽可能紧凑:您只需插入一个正则表达式文字,而不是将整个库作为运行时依赖项引入。