如何否定代理对的集合?

时间:2013-07-30 19:25:55

标签: javascript regex unicode

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

This article显示如何匹配它们,所以匹配ascii小写字母或麻将牌红龙(U + 1F004)我可以使用:

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

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

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

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

- 会导致空字符串。

1 个答案:

答案 0 :(得分: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中为我们提供星体飞机支持......