1

具体的には、範囲を一致させたいです[#x10000-#xEFFFF]。私の知る限り、\uエスケープ シーケンスは 5 桁ではなく 4 桁の 16 進数のみを受け入れます。より高い値を一致させる方法はありますか?

4

2 に答える 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

http://jsbin.com/awidew/1

mz

于 2013-03-13T15:30:55.187 に答える