我正在尝试使用此正则表达式删除非ASCII字符+非货币符号:
string.replace(/[^\x20-\x7E\p{Sc}]/g, '')
事实证明货币符号正在被移除:(
答案 0 :(得分:2)
根据this page JavaScript的原生正则表达式对象不支持Unicode类别(例如正则表达式模式中的{Sc}
货币类别)。
您可以考虑使用第三方JavaScript库(例如on this page)来获得此功能。
答案 1 :(得分:0)
免责声明:我是XRegExp的撰稿人 - 我编写了生成Unicode插件数据的脚本。您确定要安装Unicode插件吗?
如果您只需要一个支持Unicode的正则表达式,那么您可能不想为此提供整个XRegExp库及其Unicode插件。另一种解决方案是使用构建脚本,使用Regenerate和the 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]
这可以直接用作正则表达式文字的一部分。
这种方法的主要优点是,如果您想要在集合中添加或删除其他字符,则无需手动调整正则表达式。相反,您可以通过添加或删除某些符号来更改生成它的脚本,然后再次运行它。与任何正则表达式,恕我直言,脚本的代码更易读和可维护。此外,输出尽可能紧凑:您只需插入一个正则表达式文字,而不是将整个库作为运行时依赖项引入。