RegExp.prototype[Symbol.search]()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

RegExp 实例的 [Symbol.search]() 方法指定了 String.prototype.search() 的行为。

语法

js
regexp[Symbol.search](str)

参数

str

搜索的目标 String

返回值

整数

如果成功的话,[Symbol.search]() 返回该正则模式的第一个匹配项的在字符串中的位置索引。否则将返回 -1。

描述

这个方法在 String.prototype.search() 的内部调用。例如,下面的两个方法返回相同结果。

js
"abc".search(/a/);

/a/[Symbol.search]("abc");

这个方法为自定义 RegExp 子类中的匹配行为而存在。

示例

直接调用

这个方法的使用方式和 String.prototype.search() 相同,不同之处是 this 和参数顺序。

js
var re = /-/g;
var str = "2016-01-02";
var result = re[Symbol.search](str);
console.log(result); // 4

在子类中使用 [Symbol.search]()

{jsxref("RegExp")}} 的子类可以覆写 [Symbol.search]()方法来修改默认行为。

js
class MyRegExp extends RegExp {
  constructor(str) {
    super(str);
    this.pattern = str;
  }
  [Symbol.search](str) {
    return str.indexOf(this.pattern);
  }
}

var re = new MyRegExp("a+b");
var str = "ab a+b";
var result = str.search(re); // String.prototype.search 调用 re[Symbol.search]()。
console.log(result); // 3

规范

Specification
ECMAScript® 2025 Language Specification
# sec-regexp.prototype-%symbol.search%

浏览器兼容性

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
[Symbol.search]

Legend

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

Full support
Full support

参见