1

我一直在使用 JavaScript 代理对在 0x0FFFF 范围之外寻找匹配的 unicode 字符。

本文展示了如何匹配它们,因此要匹配 ascii 小写字母或麻将牌红龙(U+1F004),我可以使用:

/[a-z]|\ud83c\udc04/g

代理序列意味着集合不能全部存在于一个字符类中,那么我该如何否定它呢?即,我如何匹配不在[a-z]范围内且不是代理对的任何字符\ud83c\udc04

我想在替换操作中使用它,就像 -

'123'.replace(/[^a-z]/g, '' )

- 将导致一个空字符串。

4

1 回答 1

0

允许范围之外的所有其他序列:

/[\u0000-\u0060\u007B-\uD83B\uD83D-\uDBFF\uE000-FFFF]|\uD83C[\uDC00-\uDC03\uDC05-\uDFFF]/g

一个更短的替代方案是负前瞻。由于 IE<8 中的实现错误,它们经常被避免,但应该适用于这种情况。但是您必须小心不要意外匹配代理对中的第二个代码单元:

/(?![a-z\uDC00-\uDFFF]|\uD83C\uDC04)./g

或者等待并希望 ECMAScript 第六版在 RegExp 中为我们提供星体平面支持......

于 2013-07-30T20:17:18.977 回答