正規表現とは

正規表現(Regular Expression / Regex)は、文字列のパターンを記述するための記法です。テキストの検索・抽出・置換・バリデーションに使われ、あらゆるプログラミング言語でサポートされています。

基本的な記号

  • .:任意の1文字(改行を除く)
  • *:直前のパターンの0回以上の繰り返し
  • +:直前のパターンの1回以上の繰り返し
  • ?:直前のパターンの0または1回
  • {n,m}:直前のパターンのn回以上m回以下
  • []:文字クラス。[a-z]は小文字英字
  • ^:行の先頭
  • $:行の末尾
  • ():グループ化とキャプチャ
  • |:OR(いずれか)

よく使うパターン

  • メールアドレス^[\w.+-]+@[\w-]+\.[a-z]{2,}$
  • 日本語の電話番号^0\d{1,4}-?\d{1,4}-?\d{4}$
  • 郵便番号^\d{3}-?\d{4}$
  • 日付(YYYY-MM-DD)^\d{4}-\d{2}-\d{2}$

JavaScriptでの使い方

const email = 'user@example.com'
const pattern = /^[\w.+-]+@[\w-]+\.[a-z]{2,}$/i
console.log(pattern.test(email)) // true

const text = '東京都渋谷区'
const result = text.match(/[都道府県]/) // ['都']

グリーディとレイジーマッチング

*+はデフォルトで「できるだけ多く」マッチしようとします(グリーディ)。*?+?とすると「できるだけ少なく」マッチします(レイジー)。HTMLタグの抽出などで重要な違いです。