From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../global_objects/regexp/@@search/index.html | 153 +++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 files/zh-cn/web/javascript/reference/global_objects/regexp/@@search/index.html (limited to 'files/zh-cn/web/javascript/reference/global_objects/regexp/@@search') diff --git a/files/zh-cn/web/javascript/reference/global_objects/regexp/@@search/index.html b/files/zh-cn/web/javascript/reference/global_objects/regexp/@@search/index.html new file mode 100644 index 0000000000..c88398e1a2 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/regexp/@@search/index.html @@ -0,0 +1,153 @@ +--- +title: 'RegExp.prototype[@@search]()' +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@search +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@search +--- +
{{JSRef}}
+ +

[@@search]() 方法执行了一个在给定字符串中的一个搜索以取得匹配正则模式的项。

+ +

语法

+ +
regexp[Symbol.search](str)
+ +

参数

+ +
+
str
+
搜索的目标 {{jsxref("String")}}。
+
+ +

返回值

+ +
+
整数
+
如果成功的话,[@@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
+
+ +

规范

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}}{{Spec2('ES6')}}初始定义
{{SpecName('ESDraft', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}}{{Spec2('ESDraft')}} 
+ +

浏览器兼容性

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatUnknown}}{{CompatGeckoDesktop(49)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile(49)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

另见

+ + -- cgit v1.2.3-54-g00ecf