试一试
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 |
浏览器兼容性
加载中…