给定一个输入字符串,生成一个输出字符串,其中所有无效序列都被删除或用U + FFFD替换。
有没有比实现状态机char-by-char或非本机node.JS模块更好的方法?
无效序列是,例如,孤立的代理"\uD800"
或其他无效的多字符序列。
答案 0 :(得分:2)
匹配无效序列所需的正则表达式取决于您要包含的内容。要使用U + FFFD替换孤立的代理,您可以使用以下内容:
var surrogates = /[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
str = str.replace(surrogates , function ($0) {
return $0.length > 1 ? $0 : '\ufffd';
});
如果您将XRegExp库与Unicode addons一起使用,则可以使用\p{Cs}
或\p{Surrogate}
Unicode类别而不是[\ud800-\udfff]
。使用XRegExp还可以轻松访问其他可能相关的Unicode属性,例如\p{Noncharacter_Code_Point}
,\p{Co}
或\p{Private_Use}
,\p{Cn}
或\p{Unassigned}
。
由于你正在使用Node.js,你可以使用npm install xregexp
通过npm install XRegExp。 XRegExp的npm模块自动包含Unicode插件。