概要:このチュートリアルでは、正規表現における文字クラスについて学び、数字、空白、単語文字を含む文字セットに一致させる方法を学びます。
文字クラスの紹介
文字クラスを使用すると、文字セットから任意の記号に一致させることができます。文字クラスは文字セットとも呼ばれることに注意してください。
次のような電話番号があるとします。
+1-(408)-555-0105
Code language: JavaScript (javascript)
それを単なる数字に変換したいとします。
14085550105
Code language: JavaScript (javascript)
正規表現の文字クラスは、これを実現するのに役立ちます。
まず、数字の文字クラスについて見ていきましょう。数字の文字クラスは、任意の単一の数字に一致する\d
で示されます。
\d
Code language: JavaScript (javascript)
次の例では、電話番号の最初の数字に一致させるために\d
を使用しています。
let phone = '+1-(408)-555-0105';
let re = /\d/;
console.log(phone.match(re));
Code language: JavaScript (javascript)
出力
['1', index: 1, input: '+1-(408)-555-0105', groups: undefined]
Code language: JavaScript (javascript)
グローバルフラグ(g
)を追加すると、正規表現は最初の数字ではなくすべての数字を検索します。
let phone = '+1-(408)-555-0105';
let re = /\d/g;
console.log(phone.match(re));
Code language: JavaScript (javascript)
出力
["1", "4", "0", "8", "5", "5", "5", "0", "1", "0", "5"]
Code language: JavaScript (javascript)
これで、電話番号を次のように単なる数字に変換できます。
match()
メソッドを使用して、数字を含む配列を返します。join()
メソッドを使用して、配列の要素を文字列に連結します。
例えば
let phone = '+1-(408)-555-0105';
let re = /\d/g;
let numbers = phone.match(re);
let phoneNo = numbers.join('');
console.log(phoneNo);
Code language: JavaScript (javascript)
出力
14085550105
Code language: JavaScript (javascript)
より簡潔にするために、match()
とjoin()
メソッドを次のようにチェーンできます。
console.log('+1-(408)-555-0105'.match(/\d/g).join(''));
Code language: JavaScript (javascript)
数字の文字クラス(\d
)の他に、正規表現は他の文字クラスもサポートしています。
最も一般的に使用される文字クラスは次のとおりです。
\d
– 0から9までの単一の数字または文字に一致します。\s
– スペース、タブ(\t
)、改行(\n
)などの単一の空白記号に一致します。\w
–w
は単語文字を表します。ラテンアルファベット、数字、アンダースコア(_
)を含むASCII文字[A-Za-z0-9_]
に一致します。
実際には、文字クラスを組み合わせて、より強力な一致を形成することがよくあります。
たとえば、\w\d
はO2
のように数字が続く任意の単語に一致します。
let str = 'O2 is oxygen';
let re = /\w\d/g
console.log(str.match(re));
Code language: JavaScript (javascript)
出力
['O2']
Code language: JavaScript (javascript)
パターンには、通常の文字と文字クラスの両方を含めることができます。たとえば、ES\d
正規表現は、ES6
のように数字が続くES
に一致します。
let str = 'ES6 Tutorial';
let re = /ES\d/g
console.log(str.match(re));
Code language: JavaScript (javascript)
出力
['ES6']
Code language: JavaScript (javascript)
反転クラス
文字クラスには、同じ文字の大文字を持つ反転クラスがあります。たとえば、\D
は\d
の反転です。
反転クラスは他のすべての文字に一致します。たとえば、\D
は数字(または\d
)以外の任意の文字に一致します。以下は反転クラスです。
\D
– 数字以外の任意の文字(例:文字)に一致します。\S
– 空白以外の任意の文字(例:文字)に一致します。\W
– 単語文字以外の任意の文字(例:ラテン文字以外の文字またはスペース)に一致します。
電話番号の例に戻ると、グローバルフラグ(g
)付きで\d
を使用できます。
let phone = '+1-(408)-555-0105';
let re = /\d/g;
console.log(phone.match(re).join(''));
Code language: JavaScript (javascript)
出力
14085550105
Code language: JavaScript (javascript)
または、\D
反転クラスを使用して数字以外の文字を削除し、次のように数字以外の文字をすべて空白に置換できます。
let phone = '+1-(408)-555-0105';
let re = /\D/g;
console.log(phone.replace(re,''));
Code language: JavaScript (javascript)
出力
14085550105
Code language: JavaScript (javascript)
ドット(.)文字クラス
ドット(.
)は、改行を除く任意の文字に一致する特殊な文字クラスです。
let re = /E.6/
console.log('ES6'.match(re));
Code language: JavaScript (javascript)
出力
['ES6', index: 0, input: 'ES6', groups: undefined]
Code language: JavaScript (javascript)
ただし、次の例ではnull
が返されます。
let re = /ES.6/
console.log('ES\n6'.match(re));
Code language: JavaScript (javascript)
改行を含む任意の文字に一致させるためにドット(.
)文字クラスを使用する場合は、s
フラグを使用できます。
let re = /ES.6/s
console.log('ES\n6'.match(re));
Code language: JavaScript (javascript)
出力
['ES\n6', index: 0, input: 'ES\n6', groups: undefined]
Code language: JSON / JSON with Comments (json)
まとめ
- 文字クラスは、特定の文字セットからの任意の記号(例:
\d
、\s
、および\w
)に一致します。 - 文字クラス
\d
、\s
、および\w
には、\d
、\s
、および\w
以外の他の文字に一致する反転クラス\D
、\S
、および\W
があります。 - ドット(
.
)は改行文字を除く任意の文字に一致します。ドット(.
)文字クラスを改行を含む任意の文字に一致させるには、s
フラグを使用します。