このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Symbol.match
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2020年1月.
Symbol.match は静的データプロパティで、ウェルノウンシンボルのSymbol.match を表します。String.prototype.match() メソッドは第 1 引数に対して、入力文字列と現在のオブジェクトとの照合に使われるメソッドを、このシンボルで探します。このシンボルは、オブジェクトが正規表現として扱われるべきかどうかを決定するためにも使用されます。
詳しくは、RegExp.prototype[Symbol.match]() およびString.prototype.match() を参照してください。
In this article
試してみましょう
const regexp = /foo/;// console.log('/foo/'.startsWith(regexp));// 予想される結果 (Chrome): Error: First argument to String.prototype.startsWith must not be a regular expression// 予想される結果 (Firefox): Error: Invalid type: first can't be a Regular Expression// 予想される結果 (Safari): Error: Argument to String.prototype.startsWith cannot be a RegExpregexp[Symbol.match] = false;console.log("/foo/".startsWith(regexp));// 予想される結果: trueconsole.log("/baz/".endsWith(regexp1));// 予想される結果: false値
ウェルノウンシンボルSymbol.match です。
Symbol.match のプロパティ属性 | |
|---|---|
| 書込可能 | 不可 |
| 列挙可能 | 不可 |
| 設定可能 | 不可 |
解説
この関数は、オブジェクトが正規表現の動作をするかどうかを識別するためにも使用されます。たとえば、String.prototype.startsWith(),String.prototype.endsWith(),String.prototype.includes() メソッドは、最初の引数が正規表現であるかどうかを確認し、正規表現である場合はTypeError が発生します。ここで、match シンボルがfalse(または偽値、ただしundefined でないもの)に設定されている場合、そのオブジェクトが正規表現オブジェクトとして使用されることを意図していないことを示します。
例
>isRegExp チェックを無効にする
以下のコードはTypeError を投げます。
"/bar/".startsWith(/bar/);// TypeError が発生。/bar/ が正規表現であり、// Symbol.match が変更されていないため。ただし、Symbol.match をfalse に設定すると、オブジェクトが正規表現オブジェクトではないことを示します。結果として、startsWith とendsWith メソッドは、TypeError を発生させません。
const re = /foo/;re[Symbol.match] = false;"/foo/".startsWith(re); // true"/baz/".endsWith(re); // false仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-symbol.match> |