此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

Symbol.match

基线 广泛可用

自 2020年1月 起,此特性已在主流浏览器中得到支持,可在大多数设备和浏览器版本中正常使用。

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

描述

此函数还用于标识对象是否具有正则表达式的行为。比如, String.prototype.startsWith()String.prototype.endsWith()String.prototype.includes() 这些方法会检查其第一个参数是否是正则表达式,是正则表达式就抛出一个TypeError。现在,如果 match symbol 设置为 false(或者一个 假值),就表示该对象不打算用作正则表达式对象。

Symbol.match 的属性特性
可写
可枚举
可配置

示例

禁止表达式检查

下面代码会抛出一个 TypeError

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

// Throws TypeError,因为 /bar/ 是一个正则表达式
// 且 Symbol.match 没有修改。

但是,如果你将 Symbol.match 置为 false,使用 match 属性的表达式检查会认为该对象不是正则表达式对象。startsWithendsWith 方法将不会抛出 TypeError

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

规范

规范
ECMAScript® 2027 Language Specification
# sec-symbol.match

浏览器兼容性

参见