aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/guide/regular_expressions/character_classes/index.html
blob: accc601eef354e6d78f5172331b47e03ae1d3a3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
---
title: 文字クラス
slug: Web/JavaScript/Guide/Regular_Expressions/Character_Classes
tags:
  - JavaScript
  - Reference
  - RegExp
  - Regular Expressions
translation_of: Web/JavaScript/Guide/Regular_Expressions/Character_Classes
---
<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>
 </tbody>
 <tbody>
  <tr>
   <td><code>.</code></td>
   <td>
    <p>次のいずれかの意味を持ちます。</p>

    <ul>
     <li>行末文字 ( <code>\n</code><code>\r</code><code>\u2028</code><code>\u2029</code> ) を除くあらゆる 1 文字とマッチします。例えば、<code>/.y/</code> は "my" と "ay" にマッチし、"yes make my day" の "yes" にはマッチしません。</li>
     <li>文字セット内では <code>.</code> はその特別な意味を失い、文字通りの "."と一致します。</li>
    </ul>

    <p>複数行フラグ (<code>m</code>)  は "." の意味を変えないことに注意してください。そのため、複数行にわたるパターンに一致させるには、(IEの古いバージョン以外なら)文字集合 <code>[^]</code> を使うことで、改行を含む任意の文字に一致します。</p>

    <p><strong>ES2018</strong> では <code>s</code> "dotAll" フラグが追加されました。これは行末文字と一致することを可能にします。</p>
   </td>
  </tr>
  <tr>
   <td><code>\d</code></td>
   <td>
    <p>あらゆる(アラビア)数字にマッチします。<code>[0-9]</code> に相当します。例えば <code>/\d/</code><code>/[0-9]/</code> は "B2 is the suite number" の "2" にマッチします。</p>
   </td>
  </tr>
  <tr>
   <td><code>\D</code></td>
   <td>
    <p>あらゆる(アラビア)数字以外の文字にマッチします。<code>[^0-9]</code> に相当します。例えば <code>/\D/</code><code>/[^0-9]/</code> は "B2 is the suite number" の "B" にマッチします。</p>
   </td>
  </tr>
  <tr>
   <td><code>\w</code></td>
   <td>
    <p>アンダースコアを含むあらゆる半角英数字(基本ラテンアルファベット)にマッチします。<code>[A-Za-z0-9_]</code> に相当します。例えば <code>/\w/</code> は、"apple," の 'a' や "$5.28," の "5" や "3D" の "3" にマッチします。</p>
   </td>
  </tr>
  <tr>
   <td><code>\W</code></td>
   <td>
    <p>前述以外の文字にマッチします。<code>[^A-Za-z0-9_]</code> に相当します。例えば <code>/\W/</code><code>/[^A-Za-z0-9_]/</code> は、"50%" の "%" にマッチします。</p>
   </td>
  </tr>
  <tr>
   <td><code>\s</code></td>
   <td>
    <p>スペース、タブ、改ページ、改行を含むホワイトスペース文字にマッチします。<code>[ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​-\u200a​\u2028\u2029\u202f\u205f​\u3000\ufeff]</code> に相当します。例えば <code>/\s\w*/</code><code>"foo bar"</code><code>" bar"</code> にマッチします。</p>
   </td>
  </tr>
  <tr>
   <td><code>\S</code></td>
   <td>
    <p>ホワイトスペース以外の文字にマッチします。<code>[^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]</code> に相当します。例えば <code>/\S\w*/</code> は "foo bar" の "foo" にマッチします。</p>
   </td>
  </tr>
  <tr>
   <td><code>\t</code></td>
   <td>タブ (U+0009) にマッチします。</td>
  </tr>
  <tr>
   <td><code>\r</code></td>
   <td>復帰文字 (U+000D) にマッチします。</td>
  </tr>
  <tr>
   <td><code>\n</code></td>
   <td>改行文字 (U+000A) にマッチします。</td>
  </tr>
  <tr>
   <td><code>\v</code></td>
   <td>垂直タブ (U+000B) にマッチします。</td>
  </tr>
  <tr>
   <td><code>\f</code></td>
   <td>改ページ (U+000C) にマッチします。</td>
  </tr>
  <tr>
   <td><code>[\b]</code></td>
   <td>後退文字(バックスペース、U+0008)にマッチします。単語境界文字 (<code>\b</code>) については<a href="/ja/docs/Web/JavaScript/Guide/Regular_Expressions/Boundaries">境界</a>を見てください。</td>
  </tr>
  <tr>
   <td><code>\0</code></td>
   <td>NULL 文字 (U+0000) にマッチします。この後ろに他の数字を続けてはいけません。<code>\0</code> の後に(0 から 7 までの)数字が続くと 8 進数の<a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">エスケープシーケンス</a>となるからです。</td>
  </tr>
  <tr>
   <td><code>\c<em>X</em></code></td>
   <td>
    <p><code><em>X</em></code> には A から Z のうち 1 文字が入ります。文字列中の制御文字にマッチします。例えば <code>/\cM/</code> は文字列中の control-M (U+000D) にマッチします。</p>
   </td>
  </tr>
  <tr>
   <td><code>\x<em>hh</em></code></td>
   <td><code>hh</code>(2 桁の 16 進数)コードからなる文字にマッチします。</td>
  </tr>
  <tr>
   <td><code>\u<em>hhhh</em></code></td>
   <td><code>hhhh</code>(4 桁の 16 進数)の値からなる UTF-16 コードユニットにマッチします。</td>
  </tr>
  <tr>
   <td><code>\u<em>{hhhh}</em></code> または <code><em>\u{hhhhh}</em></code></td>
   <td>
    <p>(<code>u</code> フラグがセットされた時のみ)<strong> </strong> <code>U+<em>hhhh</em></code> または <code>U+<em>hhhhh</em></code> (16 進数) Unicode 値からなる文字にマッチします。</p>
   </td>
  </tr>
  <tr>
   <td><code>\</code></td>
   <td>
    <p>次の文字を特別に扱うこと、「エスケープ」することを示します。 その振る舞いは、2 通りのうちのどちらか 1 つです。</p>

    <ul>
     <li>通常文字の前に付けられた場合、次の文字が特別なもので、文字通りには評価されないことを示します。例えば <code>b</code> は文字 <code>"b"</code> にマッチします。しかし "b" の前にバックスラッシュを置いて <code>\b</code> とすると、<a href="/ja/docs/Web/JavaScript/Guide/Regular_Expressions/Boundaries">単語区切り</a>を意味するようになります。</li>
     <li>特殊文字の前に付けられた場合、次の文字が特別なものでなく、文字通りに評価されることを表します。例えば、<code>"*"</code> は、先行文字の 0 回以上の出現が一致する必要があることを意味する特殊文字です。例えば、<code>/a*/</code> は 0 回以上の <code>"a"</code> とマッチします。文字通りの <code>*</code> にマッチさせるには、その直前にバックスラッシュを入れます。例えば、<code>/a\*/</code><code>"a*"</code> とマッチします。</li>
    </ul>

    <div class="blockIndicator note">
    <p>この文字を文字通りにマッチさせるには、それ自身をエスケープします。つまり、 <code>/\\/</code> を使って <code>\</code> を検索します。</p>
    </div>
   </td>
  </tr>
 </tbody>
</table>

<h2 id="Examples" name="Examples"></h2>

<h3 id="一連の数字を探す">一連の数字を探す</h3>

<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> randomData <span class="operator token">=</span> <span class="string token">"015 354 8787 687351 3512 8735"</span><span class="punctuation token">;</span>
<span class="keyword token">var</span> regexpFourDigits <span class="operator token">=</span> <span class="regex token">/\b\d{4}\b/g</span><span class="punctuation token">;</span>
<span class="comment token">// \b は境界を示します(つまり、単語の真ん中からマッチを開始しません)</span>
<span class="comment token">// \d{4} は 4 つの数字を示します</span>
<span class="comment token">// \b は別の境界を示します(つまり、単語の真ん中でマッチが終わりません)</span>


console<span class="punctuation token">.</span><span class="function token">table</span><span class="punctuation token">(</span>randomData<span class="punctuation token">.</span><span class="function token">match</span><span class="punctuation token">(</span>regexpFourDigits<span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="comment token">// ['8787', '3512', '8735']</span></code></pre>

<h3 id="A_から始まる(ラテンアルファベットの)単語を探す">A から始まる(ラテンアルファベットの)単語を探す</h3>

<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> aliceExcerpt <span class="operator token">=</span> <span class="string token">"I’m sure I’m not Ada,’ she said, ‘for her hair goes in such long ringlets, and mine doesn’t go in ringlets at all."</span><span class="punctuation token">;</span>
<span class="keyword token">var</span> regexpWordStartingWithA <span class="operator token">=</span> <span class="regex token">/\b[aA]\w+/g</span><span class="punctuation token">;</span>
<span class="comment token">// \b は境界を示します(つまり、単語の真ん中からマッチを開始しません)</span>
<span class="comment token">// [aA] は a または A の文字を示します</span>
<span class="comment token">// \w+ は複数回の *ラテンアルファベットからなる* 任意の文字を示します</span>

console<span class="punctuation token">.</span><span class="function token">table</span><span class="punctuation token">(</span>aliceExcerpt<span class="punctuation token">.</span><span class="function token">match</span><span class="punctuation token">(</span>regexpWordStartingWithA<span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="comment token">// ['Ada', 'and', 'at', 'all']</span></code></pre>

<h3 id="(ユニコード文字の)単語を探す">(ユニコード文字の)単語を探す</h3>

<p>単語を表すために、ラテンアルファベットではなく、 <span class="ILfuVd"><span class="e24Kjd">Unicode</span></span> 文字の範囲が使えます。(つまり、ロシア語やアラビア語のような他の言語のテキストを扱えます。) <span class="ILfuVd"><span class="e24Kjd">Unicode</span></span> の 「<span class="ILfuVd"><span class="e24Kjd">基本多言語面</span></span>」には、世界中で使われているほとんどの文字が含まれており、それらの文字で書かれた単語にマッチするための文字クラスと範囲を利用できます。</p>

<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> nonEnglishText <span class="operator token">=</span> <span class="string token">"Приключения Алисы в Стране чудес"</span><span class="punctuation token">;</span>
<span class="keyword token">var</span> regexpBMPWord <span class="operator token">=</span> <span class="regex token">/([\u0000-\u0019\u0021-\uFFFF])+/gu</span><span class="punctuation token">;</span>
<span class="comment token">// U+0000 から U+FFFF までの BMP、ただし、U+0020</span> は空白

console<span class="punctuation token">.</span><span class="function token">table</span><span class="punctuation token">(</span>nonEnglishText<span class="punctuation token">.</span><span class="function token">match</span><span class="punctuation token">(</span>regexpBMPWord<span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="punctuation token">[</span> <span class="string token">'Приключения'</span><span class="punctuation token">,</span> <span class="string token">'Алисы'</span><span class="punctuation token">,</span> <span class="string token">'в'</span><span class="punctuation token">,</span> <span class="string token">'Стране'</span><span class="punctuation token">,</span> <span class="string token">'чудес'</span> <span class="punctuation token">]</span></code></pre>

<div class="hidden">
<p>Note for MDN editors: please do not try to add funny examples with emoji as those characters are not handled by the platform (Kuma).</p>
</div>

<h2 id="Specifications" name="Specifications">仕様</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">仕様書</th>
   <th scope="col">策定状況</th>
   <th scope="col">コメント</th>
  </tr>
 </thead>
 <tbody>
  <tr>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-characterclass', 'RegExp: Character classes')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td></td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_support" name="Browser_support">ブラウザサポート</h2>



<p>{{Compat("javascript.builtins.RegExp.character_classes")}}</p>

<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>