正規表現:文字クラス

概要:このチュートリアルでは、正規表現における文字クラスについて学び、数字、空白、単語文字を含む文字セットに一致させる方法を学びます。

文字クラスの紹介

文字クラスを使用すると、文字セットから任意の記号に一致させることができます。文字クラスは文字セットとも呼ばれることに注意してください。

次のような電話番号があるとします。

+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)などの単一の空白記号に一致します。
  • \wwは単語文字を表します。ラテンアルファベット、数字、アンダースコア(_)を含むASCII文字[A-Za-z0-9_]に一致します。

実際には、文字クラスを組み合わせて、より強力な一致を形成することがよくあります。

たとえば、\w\dO2のように数字が続く任意の単語に一致します。

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フラグを使用します。
このチュートリアルは役に立ちましたか?