From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../regular_expressions/quantifiers/index.html | 152 +++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 files/ja/web/javascript/guide/regular_expressions/quantifiers/index.html (limited to 'files/ja/web/javascript/guide/regular_expressions/quantifiers') diff --git a/files/ja/web/javascript/guide/regular_expressions/quantifiers/index.html b/files/ja/web/javascript/guide/regular_expressions/quantifiers/index.html new file mode 100644 index 0000000000..273fc82ff1 --- /dev/null +++ b/files/ja/web/javascript/guide/regular_expressions/quantifiers/index.html @@ -0,0 +1,152 @@ +--- +title: 数量詞 +slug: Web/JavaScript/Guide/Regular_Expressions/Quantifiers +tags: + - JavaScript + - Reference + - Regular Expressions + - quantifiers + - regex +translation_of: Web/JavaScript/Guide/Regular_Expressions/Quantifiers +--- +

{{jsSidebar("JavaScript Guide")}}{{draft}}

+ +

数量詞はマッチする文字や式の数を示します。

+ +

種類

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
文字意味
x* +

直前の文字 x の 0 回以上の繰り返しにマッチします。例えば /bo*/ は "A ghost booooed" の "boooo" や "A bird warbled" の "b" にマッチしますが、"A goat grunted" ではマッチしません。

+
x+ +

直前の文字 x の 1 回以上の繰り返しにマッチします。{1,} に相当します。例えば /a+/ は "candy" の "a" や "caaaaaaandy" のすべての "a" にマッチします。

+
x? +

直前の文字 x の 0 回か 1 回の出現にマッチします。例えば /e?le?/ は "angel" の "el" や "angle" の "le"、あるいは "oslo" の "l" にマッチします。

+ +

*+?{} といった量指定子の直後に使用した場合、その量指定子をデフォルトとは逆の{{原語併記("非貪欲", "non-greedy")}} (最短)マッチにします。デフォルトは{{原語併記("欲張り", "greedy")}}(最長)マッチです。

+
x{n} +

n には正の整数が入ります。直前の文字 x がちょうど n 回出現するものにマッチします。例えば /a{2}/ は "candy" の "a" にはマッチしませんが、"caaandy" の最初の 2 個の "a" にはマッチします。

+
x{n,} +

n には正の整数が入ります。直前の文字 x の少なくとも n 回の出現にマッチします。例えば、/a{2,}/ は "candy" の "a" にはマッチしませんが、"caandy" や "caaaaaaandy" の "a" のすべてにマッチします。

+
x{n,m} +

n には 0 と正の整数が、m には n より大きい正の整数が入ります。直前の文字 x が少なくとも n 回、多くても m 回出現するものにマッチします。例えば /a{1,3}/ は "cndy" ではマッチせず、"candy" の 'a'、"caandy" の 最初の 2 個の "a"、"caaaaaaandy" の最初の 3 個の "a" にマッチします。"caaaaaaandy" では元の文字列に "a" が 4 個以上ありますが、マッチするのは "aaa" であることに注意してください。

+
+

x*?
+ x+?
+ x??
+ x{n}?
+ x{n,}?
+ x{n,m}?

+
+

既定では *+ といった数量詞は{{原語併記("貪欲", "greedy")}} です。つまり、できる限り多くの文字列とマッチしようとします。数量詞の後にある ? 文字は{{原語併記("非貪欲", "non-greedy")}} 数量詞をつくります: つまり、マッチが見つかるとすぐに停止します。例えば、"some <foo> <bar> new </bar> </foo> thing" といった文字列が与えられたなら:

+ +
    +
  • /<.*>/ はおそらく "<foo> <bar> new </bar> </foo>" にマッチするでしょう
  • +
  • /<.*?>/ はおそらく "<foo>" にマッチするでしょう
  • +
+
+ +

+ +

任意の文字

+ +
var britishText = "He asked his neighbour a favour.";
+var americanText = "He asked his neighbor a favor.";
+
+var regexpEnding = /\w+ou?r/g;
+// \w+ 1つ以上の文字
+// o   "o" が続く
+// u?  任意で "u" が続く
+// r   "r" が続く
+
+console.table(britishText.match(regexpEnding));
+// ["neighbour", "favour"]
+
+console.table(americanText.match(regexpEnding));
+// ["neighbor", "favor"]
+
+ +

貪欲と非貪欲の比較

+ +
var text = "I must be getting somewhere near the centre of the earth.";
+var greedyRegexp = /[\w ]+/;
+// [\w ]      ラテンアルファベットまたは空白
+//      +     1回以上
+
+console.log(text.match(greedyRegexp)[0]);
+// "I must be getting somewhere near the centre of the earth."
+// テキストのすべてがマッチ
+
+var nonGreedyRegexp = /[\w ]+?/; // クエスチョンマークに注目
+console.log(text.match(nonGreedyRegexp));
+// "I"
+// マッチは可能なもので最小
+
+ +

仕様

+ + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('ESDraft', '#sec-quantifier', 'RegExp: Quantifiers')}}{{Spec2('ESDraft')}}
+ +

ブラウザサポート

+ +
+ + +

{{Compat("javascript.builtins.RegExp.quantifiers")}}

+
+ +

関連情報

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