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 September 2015.

Symbol.match は静的データプロパティで、ウェルノウンシンボルである Symbol.match を表します。String.prototype.match() メソッドは第 1 引数に対して、入力文字列と現在のオブジェクトとの照合に使われるメソッドを、このシンボルで探します。このシンボルは、オブジェクトが正規表現として扱われるべきかどうかを決定するためにも使用されます。

詳しくは、RegExp.prototype[Symbol.match]() および String.prototype.match() を参照してください。

試してみましょう

const regexp1 = /foo/;
// console.log('/foo/'.startsWith(regexp1));
// Expected output (Chrome): Error: First argument to String.prototype.startsWith must not be a regular expression
// Expected output (Firefox): Error: Invalid type: first can't be a Regular Expression
// Expected output (Safari): Error: Argument to String.prototype.startsWith cannot be a RegExp

regexp1[Symbol.match] = false;

console.log("/foo/".startsWith(regexp1));
// Expected output: true

console.log("/baz/".endsWith(regexp1));
// Expected output: false

ウェルノウンシンボル Symbol.match です。

Symbol.match のプロパティ属性
書込可能不可
列挙可能不可
設定可能不可

解説

この関数は、オブジェクトが正規表現の動作をするかどうかを識別するためにも使用されます。たとえば、String.prototype.startsWith(), String.prototype.endsWith(), String.prototype.includes() メソッドは、最初の引数が正規表現であるかどうかを確認し、正規表現である場合は TypeError が発生します。ここで、match シンボルが false(または偽値、ただし undefined でないもの)に設定されている場合、そのオブジェクトが正規表現オブジェクトとして使用されることを意図していないことを示します。

isRegExp チェックを無効にする

以下のコードは TypeError を投げます。

js
"/bar/".startsWith(/bar/);

// TypeError が発生。/bar/ が正規表現であり、
// Symbol.match が変更されていないため。

ただし、Symbol.matchfalse に設定すると、オブジェクトが正規表現オブジェクトではないことを示します。結果として、startsWithendsWith メソッドは、TypeError を発生させません。

js
const re = /foo/;
re[Symbol.match] = false;
"/foo/".startsWith(re); // true
"/baz/".endsWith(re); // false

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-symbol.match

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
match

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報