概要:このチュートリアルでは、正規表現における文字クラスについて学び、数字、空白、単語文字を含む文字セットに一致させる方法を学びます。
文字クラスの紹介
文字クラスを使用すると、文字セットから任意の記号に一致させることができます。文字クラスは文字セットとも呼ばれることに注意してください。
次のような電話番号があるとします。
+1-(408)-555-0105Code language: JavaScript (javascript)それを単なる数字に変換したいとします。
14085550105Code language: JavaScript (javascript)正規表現の文字クラスは、これを実現するのに役立ちます。
まず、数字の文字クラスについて見ていきましょう。数字の文字クラスは、任意の単一の数字に一致する\dで示されます。
\dCode 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)出力
14085550105Code 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)出力
14085550105Code language: JavaScript (javascript)または、\D反転クラスを使用して数字以外の文字を削除し、次のように数字以外の文字をすべて空白に置換できます。
let phone = '+1-(408)-555-0105';
let re = /\D/g;
console.log(phone.replace(re,''));Code language: JavaScript (javascript)出力
14085550105Code 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フラグを使用します。