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/@@match/index.html | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/@@match/index.html (limited to 'files/ja/web/javascript/reference/global_objects/regexp/@@match') diff --git a/files/ja/web/javascript/reference/global_objects/regexp/@@match/index.html b/files/ja/web/javascript/reference/global_objects/regexp/@@match/index.html new file mode 100644 index 0000000000..4359a94e96 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/@@match/index.html @@ -0,0 +1,116 @@ +--- +title: 'RegExp.prototype[@@match]()' +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@match +tags: + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expression +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@match +--- +
{{JSRef}}
+ +

[@@match]() メソッドは、文字列正規表現に一致した部分を取得します。

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

構文

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

引数

+ +
+
str
+
一致の対象となる {{jsxref("String")}}。
+
+ +

返値

+ +

一致した全体の結果と括弧が捕捉した一致箇所の結果を含む {{jsxref("Array")}}。一致するものがなかった場合は、{{jsxref("null")}}。

+ +

解説

+ +

このメソッドは、{{jsxref("String.prototype.match()")}} で内部的に呼び出されます。

+ +

たとえば、次の 2 つの例は同じ結果を返します。

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

このメソッドは、RegExp サブクラス内で一致の振る舞いをカスタマイズするために存在しています。

+ +

+ +

直接呼び出し

+ +

このメソッドは、ほとんど {{jsxref("String.prototype.match()")}} と同じ方法で使用することができますが、 this と引数の並び順が異なります。

+ +
let re = /[0-9]+/g;
+let str = '2016-01-02';
+let result = re[Symbol.match](str);
+console.log(result);  // ["2016", "01", "02"]
+
+ +

サブクラスで @@match を使用

+ +

{{jsxref("RegExp")}} のサブクラスは、既定の動作を修正するために [@@match]() メソッドをオーバーライドできます。

+ +
class MyRegExp extends RegExp {
+  [Symbol.match](str) {
+    let result = RegExp.prototype[Symbol.match].call(this, str);
+    if (!result) return null;
+    return {
+      group(n) {
+        return result[n];
+      }
+    };
+  }
+}
+
+let re = new MyRegExp('([0-9]+)-([0-9]+)-([0-9]+)');
+let str = '2016-01-02';
+let result = str.match(re); // String.prototype.match calls re[@@match].
+console.log(result.group(1)); // 2016
+console.log(result.group(2)); // 01
+console.log(result.group(3)); // 02
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-regexp.prototype-@@match', 'RegExp.prototype[@@match]')}}
+ +

ブラウザーの互換性

+ +
+ + +

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

+
+ +

関連情報

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