SyntaxError: invalid property name in regular expression
當 \p 和 \P Unicode 字元類轉義後面沒有跟著有效的 Unicode 屬性名和/或值時,會發生 JavaScript 異常 "invalid property name in regular expression"(正則表示式中的屬性名無效)或 "invalid class property name in regular expression"(正則表示式中的類屬性名無效)。
訊息
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)
錯誤型別
SyntaxError
哪裡出錯了?
在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