/v标志仅启用Unicode集合语法解析,不支持运行时计算;&&和--必须在[]内用于Unicode属性集交差集;p{RGI_Emoji}按视觉单位匹配多码点emoji;q{}仅支持ASCII固定字符串。
为什么
标志不能直接做运行时集合运算
标志本身不提供运行时计算能力,它只是启用 Unicode 集合语法的解析器模式。所有
(交集)、
(差集)、
(并集)都在正则字面量编译阶段静态求值,无法插入变量、拼接字符串或调用函数。试图写
会直接报
—— 因为
在动态构造时未被解析,且
不被传统 RegExp 构造函数支持。
如何正确使用
和
做字符类精炼
交集和差集必须写在字符类
内部,且仅作用于 Unicode 属性集或基本字符字面量:
匹配 ASCII 字母(a–z, A–Z),不匹配中文“字”或希腊字母“α”
匹配所有数字字符,但排除字面量
和
(注意:不是排除 Unicode 数字属性中的 ⑥ 或 Ⅸ)
等价于
,因为 RGI 是 Emoji 的子集;但
可用于过滤掉“非标准组合”的 emoji 候选
差集右侧不能是通配符,
合法,但
非法(
不是 Unicode 属性集)
匹配多代码点 emoji 时
的关键行为
让
按“视觉上一个符号”单位匹配,而非按码点计数。这意味着:
perl正则表达式学习手册pdf版
perl正则表达式学习手册pdf版,点击下载解压即可。想学习perl正则的朋友需要看。
下载
返回
,即使它由 5 个码点(基础人 + 肤色修饰符 + ZWJ + 医生 + ZWJ)组成
也返回
,但
更严格,排除了孤立 ZWJ 或不完整组合
若想匹配“至少一个 emoji”,别用
,改用
;若要校验“纯 emoji 字符串”,必须加
和
锚点,否则
也会命中
不加
时,
语法根本无效,会抛
用来匹配自定义字符串序列,但有硬限制
是
模式下唯一支持字面字符串序列的转义,但它只接受 ASCII 字符组成的固定字符串,且不能含正则元字符:
可匹配
、
、
或
四种情况
内部不支持
、
、分组或捕获,也不能写
(
被当作字面量)
它不是替代
的通用方案,而是为特定协议字段(如日志标记、文件头)设计的紧凑写法
浏览器兼容性仍需检查:
在 Safari 17.4+、Chrome 122+、Firefox 125+ 中为
,旧版本直接忽略
并静默降级为
(导致
报错)
实际用的时候,最易被忽略的是:集合操作只在字符类内部生效,
单独写是语法错误;而
看似灵活,实则连空格都不能自由缩进——写成
就会去匹配字面的空格+OK+空格。
/v/v&&--[p{A}p{B}]new RegExp(`[\p{Letter}--${exclude}]`, 'v')SyntaxError: Invalid regular expressionp{}--&&--[]/[p{ASCII}&&p{Letter}]/v/[p{Number}--[69]]/v'6''9'/[p{Emoji}&&p{RGI_Emoji}]/v/p{RGI_Emoji}/v/[p{Emoji}--p{RGI_Emoji}]/v/[p{Letter}--p{Script=Han}]/v/[p{Letter}--w]/vw/v/vp{RGI_Emoji}/^p{RGI_Emoji}$/v.test('??⚕️')true/^p{Emoji}$/v.test('??⚕️')true/^p{RGI_Emoji}$/v^...$/p{RGI_Emoji}/v^$'x??⚕️y'/vp{}SyntaxErrorq{...}q{...}/v/[
q{
|NEWLINE}]/v'
''
''
''NEWLINE'q{}s.*q{a+b}+|RegExp.prototype.unicodeSetstrue/v/p{}p{A}--p{B}q{}q{ OK }