具体来说,我希望匹配范围[#x10000-#xEFFFF]
。 AFAIK,\u
转义序列只接受4个十六进制数字,而不是5.有没有办法匹配更高的值?
答案 0 :(得分:4)
在内部,JavaScript使用UCS-2,它仅限于基准平面。对于高范围字符,您必须使用代理项对。例如,要查找U + 13FFA,您可以匹配\uD80F\uDFFA
。
可以找到更多详细信息here。
不幸的是,这在正则表达式中的字符类中不能很好地工作。使用BMP字符,您可以执行/[a-z]/
之类的操作。你不能用更高范围的字符做到这一点,因为JavaScript不理解代理对应该被视为一个单元。您可能可以寻找处理此问题的第三方库。 <罢工>可悲的是,我不知道有任何建议。 This one可能值得一看。我从来没有用过它,所以我无法证明它的质量。
P.S。您可能会发现this shim对于处理高阶字符非常有用。
答案 1 :(得分: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