1

具体来说,我想匹配 range [#x10000-#xEFFFF]。AFAIK,\u转义序列只接受 4 个十六进制数字,而不是 5。有没有办法匹配更高的值?

4

2 回答 2

4

在内部,JavaScript 使用仅限于基本平面的 UCS-2。对于更高范围的字符,您将不得不使用代理对。例如,要查找 U+13FFA,您可以匹配\uD80F\uDFFA.

更多细节可以在这里找到。

不幸的是,这在正则表达式的字符类中效果不佳。使用 BMP 字符,您可以执行/[a-z]/. 你不能用更大范围的字符来做到这一点,因为 JavaScript 不理解代理对应该被视为一个单元。您也许可以四处寻找处理此问题的第三方库。可悲的是,我不知道有什么可以推荐的。 这个可能值得一看。我从来没有使用过它,所以我无法证明它的质量。

PS 你可能会发现这个 shim通常对处理高阶字符很有用。

于 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 回答