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