具体的には、範囲を一致させたいです[#x10000-#xEFFFF]
。私の知る限り、\u
エスケープ シーケンスは 5 桁ではなく 4 桁の 16 進数のみを受け入れます。より高い値を一致させる方法はありますか?
質問する
224 次
2 に答える
4
内部的に、JavaScript はベース プレーンに限定された UCS-2 を使用します。より高い範囲の文字については、サロゲート ペアを使用する必要があります。たとえば、U+13FFA を見つけるには、\uD80F\uDFFA
.
詳細については、こちらをご覧ください。
残念ながら、これは正規表現の文字クラス内ではうまく機能しません。BMP 文字を使用すると、次のようなことができます/[a-z]/
。JavaScript はサロゲート ペアを 1 つの単位として扱う必要があることを理解していないため、上位範囲の文字ではこれを行うことができません。これに対処するサードパーティのライブラリを探すことができるかもしれません。残念ながら、私はお勧めできるものを知りません。 これは一見の価値があるかもしれません。私はそれを使用したことがないので、その品質を証明することはできません.
PSこのシムは、一般的に高次の文字を扱うのに役立つ場合があります。
于 2013-03-13T15:37:09.997 に答える
0
たぶん、このようなものですか?
var regex = /#x[1-9a-eA-E][0-9a-fA-F]{4}/g;
console.log(regex.test("#x03FFA")); // false
console.log(regex.test("#x13FFA")); // true
mz
于 2013-03-13T15:30:55.187 に答える