試一試
const regex1 = /foo/;
const regex2 = /foo/i;
console.log(regex1.test("Football"));
// Expected output: false
console.log(regex2.ignoreCase);
// Expected output: true
console.log(regex2.test("Football"));
// Expected output: true
描述
如果使用了 i 標誌,則 RegExp.prototype.ignoreCase 的值為 true;否則為 false。i 標誌表示在字串匹配時應忽略大小寫。不區分大小寫的匹配透過將預期字元集和匹配的字串都對映到相同的 casing 來實現。
如果正則表示式是 Unicode 感知的,則大小寫對映透過 CaseFolding.txt 中指定的簡單大小寫摺疊進行。此對映始終對映到一個單一的碼點,因此它不會將例如 ß (U+00DF LATIN SMALL LETTER SHARP S) 對映到 ss(這是全大小寫摺疊,而非簡單大小寫摺疊)。然而,它可能會將基本拉丁字元塊之外的碼點對映到該塊內的碼點 — 例如,ſ (U+017F LATIN SMALL LETTER LONG S) 會摺疊成 s (U+0073 LATIN SMALL LETTER S),而 K (U+212A KELVIN SIGN) 會摺疊成 k (U+006B LATIN SMALL LETTER K)。因此,ſ 和 K 可以被 /[a-z]/ui 匹配。
如果正則表示式不是 Unicode 感知的,則大小寫對映使用 Unicode 預設大小寫轉換 — 這與 String.prototype.toUpperCase() 使用的演算法相同。此演算法會阻止將基本拉丁字元塊之外的碼點對映到該塊內的碼點,因此之前提到的 ſ 和 K 不會被 /[a-z]/i 匹配。
Unicode 感知的大小寫摺疊通常會摺疊成小寫,而 Unicode 不感知的大小寫摺疊會摺疊成大寫。這兩者並非完美的逆操作,因此存在一些細微的行為差異。例如,Ω (U+2126 OHM SIGN) 和 Ω (U+03A9 GREEK CAPITAL LETTER OMEGA) 都會透過簡單大小寫摺疊對映到 ω (U+03C9 GREEK SMALL LETTER OMEGA),因此 "\u2126" 可以被 /[\u03c9]/ui 和 /[\u03a9]/ui 匹配;另一方面,U+2126 會被預設大小寫轉換對映到自身,而另外兩者都會對映到 U+03A9,因此 "\u2126" 既不會被 /[\u03c9]/i 也不會被 /[\u03a9]/i 匹配。
ignoreCase 的設定訪問器為 undefined。您不能直接更改此屬性。
示例
使用 ignoreCase
const regex = /foo/i;
console.log(regex.ignoreCase); // true
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-get-regexp.prototype.ignorecase |
瀏覽器相容性
載入中…