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/@@matchall/index.html | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 files/zh-cn/web/javascript/reference/global_objects/regexp/@@matchall/index.html (limited to 'files/zh-cn/web/javascript/reference/global_objects/regexp/@@matchall') diff --git a/files/zh-cn/web/javascript/reference/global_objects/regexp/@@matchall/index.html b/files/zh-cn/web/javascript/reference/global_objects/regexp/@@matchall/index.html new file mode 100644 index 0000000000..3cc1465704 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/regexp/@@matchall/index.html @@ -0,0 +1,89 @@ +--- +title: 'RegExp.prototype[@@matchAll]()' +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@matchAll +tags: + - JavaScript + - 正则表达式 +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@matchAll +--- +

{{JSRef}}

+ +

 [@@matchAll]方法返回对字符串使用正则表达式的所有匹配项。

+ +
\{{EmbedInteractiveExample("pages/js/regexp-prototype-@@matchall.html")}}
+ + + +

语法

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

参数

+ +
+
str
+
一个{{jsxref("String")}}的匹配对象。
+
+ +

返回值

+ +

一个迭代器

+ +

描述

+ +

本方法在{{jsxref("String.prototype.matchAll()")}}中被内部调用。例如,以下两个示例返回相同的结果。

+ +
'abc'.matchAll(/a/);
+
+/a/[Symbol.matchAll]('abc');
+ +

本方法用于自定义RegExp子类中的匹配行为。

+ +

示例

+ +

直接调用

+ +

本方法的使用方法几乎与{{jsxref("String.prototype.matchAll()")}}相同,除了this 的不同以及参数顺序的的差异。

+ +
var re = /[0-9]+/g;
+var str = '2016-01-02';
+var result = re[Symbol.matchAll](str);
+
+console.log(Array.from(result, x => x[0]));
+// ["2016", "01", "02"]
+
+ +

在子类中使用@@matchAll

+ +

{{jsxref("RegExp")}}的子类可以重写[@@matchAll]()方法来修改默认行为。例如,返回一个{{jsxref("Array")}}而不是iterator:

+ +
class MyRegExp extends RegExp {
+  [Symbol.matchAll](str) {
+    var result = RegExp.prototype[Symbol.matchAll].call(this, str);
+    if (!result) {
+      return null;
+    } else {
+      return Array.from(result);
+    }
+  }
+}
+
+var re = new MyRegExp('([0-9]+)-([0-9]+)-([0-9]+)', 'g');
+var str = '2016-01-02|2019-03-07';
+var result = str.matchAll(re);
+console.log(result[0]); // [ "2016-01-02", "2016", "01", "02" ]
+console.log(result[1]); // [ "2019-03-07", "2019", "03", "07" ]
+
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.RegExp.@@matchAll")}}

+ +

相关链接

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