JavaScript是否支持正则表达式中Unicode范围超过0xFFFF的字符?

3

这个例子的正则表达式^[\u0021-\u003F\u0041-\uFFEF]+@[\u0021-\u003F\u0041-\uFFEF]+\.[\u0021-\u003F\u0041-\uFFEF]+$)可以通过Unicode字符范围来过滤字符,我可以让范围从\u0000\uFFFF,但是Unicode支持超过0xFFFF的字符。在JavaScript的正则表达式中,我能使用这些以上的范围吗?

2个回答

2

为了与ECMAScript 5和旧环境保持向后兼容性,不幸的解决方案是使用代理对:

>> '\uD83D\uDCA9'  
'' // U+1F4A9 PILE OF POO  

In that case, each escape represents the code point of a surrogate half. Two surrogate halves form a single astral symbol.

链接: https://mathiasbynens.be/notes/javascript-unicode

这篇文章介绍了在JavaScript中处理Unicode字符的一些技巧和注意事项。它涵盖了字符串长度、正则表达式匹配、字符串比较和编码等方面的问题,并提供了一些实用的解决方案。如果你在开发中需要处理Unicode字符,这篇文章会对你有所帮助。

有了这些代理,我想你可能不能使用代理范围? - Alexandru
孤立的代理码点没有通用的解释;因此,对于这个范围,没有字符代码图表或名称列表可供使用。链接:https://en.wikipedia.org/wiki/Universal_Character_Set_characters - CTRL+F -> "surrogates" - 这回答了你的问题吗? - Andrue Anderson
似乎这个正则表达式有效(应该支持所有字符和代理对):\u0000\u0000-\uFFFF\uFFFF 示例:https://regex101.com/r/aM1fU5/13 - Alexandru
@Alexandru,制作范围的有效方法是使用高代理和低代理范围的组合。例如,[\ud800-\udbff][\udc00-\udfff]将起到像匹配所有代码点> 0xFFFF的单个范围的作用。(您的解决方案似乎只能“工作”,因为您没有在任何代码点> 0xFFFF上使用它。) - Janosch

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接