如何使用正则表达式匹配高价值的unicode字符?

时间:2013-03-13 15:27:13

标签: javascript regex node.js

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

2 个答案:

答案 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

http://jsbin.com/awidew/1

MZ