試一試
const regex1 = /\u{61}/;
const regex2 = /\u{61}/u;
console.log(regex1.unicode);
// Expected output: false
console.log(regex2.unicode);
// Expected output: true
描述
如果使用了 u 標誌,則 RegExp.prototype.unicode 的值為 true;否則為 false。u 標誌啟用各種與 Unicode 相關的特性。使用 "u" 標誌時:
- 任何 Unicode 程式碼點轉義(
\u{xxxx}、\p{UnicodePropertyValue})將被解釋為 Unicode 程式碼點,而不是普通轉義。例如,/\u{61}/u匹配"a",而/\u{61}/(不帶u標誌)匹配"u".repeat(61),其中\u等同於單個u。 - 代理對將被解釋為整個字元,而不是兩個單獨的字元。例如,
/[😄]/u只會匹配"😄",而不會匹配"\ud83d"。 - 當
lastIndex自動前進時(例如,在呼叫exec()時),Unicode 正則表示式會按 Unicode 程式碼點前進,而不是按 UTF-16 程式碼單元前進。
解析行為的其他一些更改可以防止潛在的語法錯誤(這類似於正則表示式語法的 嚴格模式)。這些語法都已被 棄用,僅為保持 Web 相容性而保留,您不應依賴它們。
unicode 的設定訪問器為 undefined。您無法直接更改此屬性。
Unicode 感知模式
當我們提到Unicode 感知模式時,意味著正則表示式同時具有 u 或 v 標誌,此時正則表示式會啟用 Unicode 相關特性(例如 Unicode 字元類轉義)並具有更嚴格的語法規則。由於 u 和 v 以不相容的方式解釋相同的正則表示式,因此同時使用這兩個標誌會導致 SyntaxError。
類似地,如果正則表示式既沒有 u 標誌也沒有 v 標誌,則該正則表示式被視為Unicode 不感知。在這種情況下,正則表示式被解釋為 UTF-16 程式碼單元序列,並且存在許多不會導致語法錯誤的舊式語法。
示例
使用 unicode 屬性
js
const regex = /\u{61}/u;
console.log(regex.unicode); // true
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-get-regexp.prototype.unicode |
瀏覽器相容性
載入中…