3

入力文字列を指定すると、すべての無効なシーケンスが削除されるか、U+FFFD に置き換えられる出力文字列が生成されます。

ステート マシンの char-by-char または非ネイティブな node.JS モジュールを実装するよりも良い方法はありますか?

無効なシーケンスは、たとえば、孤立したサロゲート"\uD800"、またはその他の無効な複数文字シーケンスです。

4

1 に答える 1

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 アドオンを使用する場合は、 の代わりに\p{Cs}または\p{Surrogate}Unicode カテゴリを使用できます[\ud800-\udfff]\p{Noncharacter_Code_Point}XRegExp を使用すると、 、\p{Co}または\p{Private_Use}\p{Cn}またはなど、関連する可能性のある他の Unicode プロパティにも簡単にアクセスできます\p{Unassigned}

Node.js を使用しているため、npm を使用して XRegExp をインストールnpm install xregexpできます。XRegExp の npm モジュールには、Unicode アドオンが自動的に含まれます。

于 2012-06-07T18:47:52.430 に答える