diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/ja/web/javascript/guide/regular_expressions/groups_and_ranges | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/ja/web/javascript/guide/regular_expressions/groups_and_ranges')
-rw-r--r-- | files/ja/web/javascript/guide/regular_expressions/groups_and_ranges/index.html | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/files/ja/web/javascript/guide/regular_expressions/groups_and_ranges/index.html b/files/ja/web/javascript/guide/regular_expressions/groups_and_ranges/index.html new file mode 100644 index 0000000000..d79009b14e --- /dev/null +++ b/files/ja/web/javascript/guide/regular_expressions/groups_and_ranges/index.html @@ -0,0 +1,162 @@ +--- +title: グループと範囲 +slug: Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges +tags: + - Guide + - JavaScript + - Reference + - Regular Expressions + - regex +translation_of: Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges +--- +<p>{{jsSidebar("JavaScript Guide")}}{{draft}}</p> + +<p>グループと範囲は、式にある文字のグループと範囲を示します。</p> + +<h2 id="Types" name="Types">種類</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">文字</th> + <th scope="col">意味</th> + </tr> + </thead> + <tbody> + <tr> + <td><code><em>x</em>|<em>y</em></code></td> + <td> + <p>"x" または "y" にマッチします。例えば <code>/green|red/</code> は "green apple" の "green" や "red apple" の "red" にマッチします。</p> + </td> + </tr> + <tr> + <td><code>[xyz]<br> + [a-c]</code></td> + <td> + <p>文字集合です。角括弧で囲まれた文字のいずれか 1 個にマッチします。ハイフンを用いて文字の範囲を指定することも可能ですが、ハイフンが括弧に囲まれた最初または最後の文字に現れている場合、それはハイフンリテラルとみなされて、通常文字として文字集合に含まれます。文字集合には文字クラスを含めることができます。</p> + + <p>例えば <code>[abcd]</code> は <code>[a-d]</code> と同じです。これは "brisket" の "b" や "chop" の "c" にマッチします。</p> + + <p>例えば、<code>[abcd-]</code> と <code>[-abcd]</code> は "brisket" の "b" と "chop" の "c" と "non-profit" の "-" (ハイフン)とマッチします。</p> + + <p>例えば、<code>[\w-]</code> は <code>[A-Za-z0-9_-]</code> と同じです。これは "brisket" の "b" や "chop" の "c" 、"non-profit" の "n" にマッチします。</p> + </td> + </tr> + <tr> + <td> + <p><code>[^xyz]<br> + [^a-c]</code></p> + </td> + <td> + <p>文字集合の否定または補集合です。角括弧で囲まれた文字ではない文字にマッチします。ハイフンを用いて文字の範囲を指定することも可能ですが、ハイフンが括弧に囲まれた最初または最後の文字に現れている場合、それはハイフンリテラルとみなされて、通常文字として文字集合に含まれます。例えば <code>[^abc]</code> は <code>[^a-c]</code> と同じです。これは "bacon" の 'o' や "chop" の 'h' にマッチします。</p> + + <div class="blockIndicator note"> + <p>^ 文字は<a href="/ja/docs/Web/JavaScript/Guide/Regular_Expressions/Boundaries">入力の先頭</a>を示すこともできます。</p> + </div> + </td> + </tr> + <tr> + <td><code>(<em>x</em>)</code></td> + <td> + <p><strong>キャプチャグループ:</strong> <code><em>x</em></code> にマッチし、マッチした内容を記憶します。例えば <code>/(foo)/</code> は "foo bar" の "foo" にマッチし、記憶します。</p> + + <p>正規表現は複数のキャプチャグループを持つことができます。結果、一般的にキャプチャグループ内の左括弧と同じ順にある、配列の要素のキャプチャグループに一致しています。たいていの場合、これはキャプチャグループ自身の順番です。これはキャプチャグループがネストしている場合に重要です。マッチは結果の要素のインデックス (<code>[1], ..., [n]</code>) や、あらかじめ定義されている <code>RegExp</code> オブジェクトのプロパティ (<code>$1, ..., $9</code>) を使ってアクセスできます。</p> + + <p>キャプチャグループはパフォーマンスペナルティがあります。マッチした部分文字列を使わない場合はキャプチャしない括弧(後述)を使ったほうがいいでしょう。</p> + + <p>全体マッチ (<code>/.../g</code>) がある場合、{{JSxRef("String.match()")}} はグループを返せません。ですが、 {{JSxRef("String.matchAll()")}} によってすべてのマッチを取得できます。</p> + </td> + </tr> + <tr> + <td><code>\<em>n</em></code></td> + <td> + <p><code><em>n</em></code> に正の整数が入ります。正規表現内において n 番目の括弧の部分にマッチした最新の部分文字列への後方参照となります(括弧の数は左からカウントします)。例えば <code>/apple(,)\sorange\1/</code> は "apple, orange, cherry, peach" の "apple, orange," にマッチします。A complete example follows this table.</p> + </td> + </tr> + <tr> + <td><code>(?<Name>x)</code></td> + <td> + <p><strong>名前付きキャプチャグループ:</strong> <code>x</code> にマッチし、<code><Name></code> で指定された名前に従い、返されるマッチの <code>groups</code> プロパティに記憶されます。三角括弧 ('<code><</code>' と '<code>></code>') にはグループ名が必須です。</p> + + <p>例えば、電話番号からアメリカのエリアコードを取り出す際、<code>/\((?<area>\d\d\d)\)/</code> を使うことができます。 結果の番号は <code>matches.groups.area</code> に表示されます。</p> + </td> + </tr> + <tr> + <td><code>(?:<em>x</em>)</code></td> + <td> + <p><strong>非キャプチャグループ:</strong> <em><code>x</code></em> にマッチしますが、マッチした内容は記憶しません。マッチの部分文字列は、結果の配列の要素 (<code>[1], ..., [n]</code>) や、あらかじめ定義されている <code>RegExp</code> オブジェクトのプロパティ (<code>$1, ..., $9</code>) から呼び出すことはできません。.</p> + </td> + </tr> + </tbody> +</table> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="母音を数える">母音を数える</h3> + +<pre class="brush: js">var aliceExcerpt = "There was a long silence after this, and Alice could only hear whispers now and then."; +var regexpVowels = /[aeiouy]/g; + +console.log("母音の数:", aliceExcerpt.match(regexpVowels).length); +// 母音の数: 25</pre> + +<h3 id="グループの使い方">グループの使い方</h3> + +<pre class="brush: js">let personList = `First_Name: John, Last_Name: Doe +First_Name: Jane, Last_Name: Smith`; + +let regexpNames = /First_Name: (\w+), Last_Name: (\w+)/mg; +let match = regexpNames.exec(personList); +do { + console.log(`Hello ${match[1]} ${match[2]}`); +} while((match = regexpNames.exec(personList)) !== null); +</pre> + +<h3 id="名前付きグループの使い方">名前付きグループの使い方</h3> + +<pre class="brush: js">let personList = `First_Name: John, Last_Name: Doe +First_Name: Jane, Last_Name: Smith`; + +let regexpNames = /First_Name: (?<firstname>\w+), Last_Name: (?<lastname>\w+)/mg; +let match = regexpNames.exec(personList); +do { + console.log(`Hello ${match.groups.firstname} ${match.groups.lastname}`); +} while((match = regexpNames.exec(personList)) !== null);</pre> + +<div class="blockIndicator note"> +<p><strong>注:</strong> すべてのブラウザがこの機能をサポートしているわけではありません。以下の互換性の表を参照してください。</p> +</div> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-classranges', 'RegExp: Ranges')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="Browser_support" name="Browser_support">ブラウザサポート</h2> + +<div> + + +<div class="hidden">Firefox currently doesn't support named groups. See <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1362154">corresponding issue</a>. — make sure to include this inside groups_ranges</div> + +<p>{{Compat("javascript.builtins.RegExp.groups_ranges")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Guide/Regular_Expressions">正規表現</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp"><code>RegExp()</code> コンストラクタ</a></li> +</ul> |