SyntaxError: invalid property name in regular expression

\p\P Unicode 字符类转义序列 后面没有有效的 Unicode 属性名称和/或值时,就会发生 JavaScript 异常“正则表达式中无效的属性名称”或“正则表达式中无效的类属性名称”。

消息

SyntaxError: Invalid regular expression: /\p{x}/u: Invalid property name (V8-based)
SyntaxError: Invalid regular expression: /[\p{x}]/u: Invalid property name in character class (V8-based)
SyntaxError: invalid property name in regular expression (Firefox)
SyntaxError: invalid class property name in regular expression (Firefox)
SyntaxError: Invalid regular expression: invalid property expression (Safari)

错误类型

哪里出错了?

Unicode 感知模式 中,\p\P 转义序列 用于根据其 Unicode 属性匹配字符或字符序列。\p 转义序列匹配具有指定 Unicode 属性的字符,而 \P 转义序列匹配不具有指定 Unicode 属性的字符。语法为

正则表达式
\p{loneProperty}
\P{loneProperty}

\p{property=value}
\P{property=value}

如果后面没有 {,然后是可识别的属性名称/值,然后是 },则会抛出此语法错误。有关允许哪些独立属性和属性名称的更多信息,请参阅 Unicode 字符类转义 参考。

示例

无效情况

js
/\p{x}/u; // "x" is not a valid Unicode property name
/\p{Script=x}/u; // "x" is not a valid value for Script
/\property/u; // "\p" is not followed by the right syntax
/\p{RGI_Emoji_Flag_Sequence}/u;
// "RGI_Emoji_Flag_Sequence" is a property of strings, so the "v" flag must be used
/\P{RGI_Emoji_Flag_Sequence}/v; // \P cannot match properties of strings

有效情况

js
/\p{Script=Latin}/u; // "Script=Latin" is a valid Unicode property
/\p{Letter}/u; // "Letter" is valid value for General_Category
/\p{RGI_Emoji_Flag_Sequence}/v; // Property of strings can only be used in "v" mode

另请参阅