--- title: 'RegExp.prototype[@@search]()' slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@search translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@search ---
[@@search]() 方法执行了一个在给定字符串中的一个搜索以取得匹配正则模式的项。
regexp[Symbol.search](str)
str[@@search]() 返回该正则模式的第一个匹配项的在字符串中的位置索引。否则将返回-1。这个方法在 {{jsxref("String.prototype.search()")}} 的内部调用。例如,下面的两个方法返回相同结果。
'abc'.search(/a/);
/a/[Symbol.search]('abc');
这个方法为自定义 RegExp 子类中的匹配行为而存在。
这个方法的使用方式和 {{jsxref("String.prototype.search()")}} 相同,不同之处是 this 和参数顺序。
var re = /-/g; var str = '2016-01-02'; var result = re[Symbol.search](str); console.log(result); // 4
@@search{jsxref("RegExp")}} 的子类可以覆写 [@@search]()方法来修改默认行为。
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 calls re[@@search].
console.log(result); // 3
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('ES6', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}} | {{Spec2('ES6')}} | 初始定义 |
| {{SpecName('ESDraft', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}} | {{Spec2('ESDraft')}} |