みこむらめもむらむらむら

なんかHTML5とかJS勉強とかやりながらめもを綴るブログ

【JavaScript】 大丈夫だと思えないので正規表現ちょっとまとめ

JavaScriptで利用が可能な主な正規表現

基本

  • ABC
    • 「ABC」という文字列
  • [ABC]
    • A、B、Cのいずれか1文字
  • [^ABC]
    • A、B、C以外のいずれか1文字
  • [A-Z]
    • A~Zの間の1文字
  • A|B|C
    • A、B、Cのいずれか

量指定

  • X*
    • 0文字以上のX("fe*"は"f"、"fe"、"fee"などにマッチ)
  • X?
    • 0、または1文字のX("fe?"は"f"、"fe"にマッチ"fee"にはアンマッチ)
  • X+
    • 1文字以上のX("fe+"は"fe"、"fee"などにマッチ、"f"にはアンマッチ)
  • X{n}
    • Xとn回一致("[0-9]{3}"は3桁の数字)
  • X{n,}
    • Xとn回以上一致("[0-9]{3,}"は3桁以上の数字)
  • X{m,n}
    • Xとm~n回一致("[0-9]{3,5}"は3~5桁の数字)

位置指定

  • ^
    • 行の先頭に一致
  • $
    • 行の末尾に一致

文字セット

  • .
    • 任意の1文字に一致
  • \w
    • 大文字/小文字の英字、数字、アンダースコア(_)に一致("[A-Za-z0-9]"と同意)
  • \W
    • 文字以外に一致("[^\w]"と同意)
  • \d
    • 数字に一致("[0-9]"と同意)
  • \D
    • 数字に一致("[^0-9]"と同意)
  • \n
    • 改行(ラインフィード)に一致
  • \r
    • 復帰(キャリッジリターン)に一致
  • \t
    • タブ文字に一致
  • \s
    • 空白文字に一致("[\n\r\t\v\f]"と同意)
  • \S
    • 空白以外の文字に一致("[^\s]"と同意)
  • \~
    • 「~」で表される文字

RegExpオブジェクトを生成する方法

var 変数名 = new RegExp('正規表現', 'オプション');  //Regオブジェクトのコンストラクタを経由する
var 変数名 = / 正規表現/ オプション ;  //正規表現リテラルを利用する
  1. コンストラクタ構文の特徴
    • コンストラクタ構文では正規表現は文字列として指定している
    • JavaScriptの文字列リテラルにおいて「\」は意味を持った予約字であるため、本来の正規表現パターンである「\w」を認識させるためには「\」を「\\」としてエスケープする必要がある
  2. 正規表現リテラルの特徴

オプション

  • g
    • 文字列全体に対してマッチングするか(無指定の場合、1度マッチングした時点で処理を終了)
  • i
    • 大文字/小文字を区別するか
  • m
    • 複数行に対応するか(改行コードを行頭/行末と認識)

オプションを複数指定する場合には
"gi"のように並べて記述する

正規表現による検索

String.matchメソッド

  • 正規表現パターンにマッチした文字列を配列として返す

RegExp.execメソッド

  • グローバル検索(gオプション)が有効か否かに関わらず一度の実行で一つの結果しか返さない
  • マッチ文字列全体とサブマッチ文字列を配列として返す
  • 最後にマッチした文字位置をはじめ直近のマッチ情報を参照するためにいくつかのプロパティを公開している
  • lastIndex
    • 検索を開始する位置
  • leftContext
    • $`
    • 最後のマッチ文字列の前の文字列
  • rightContext
    • $'
    • 最後のマッチ文字列の後に続く文字列
  • lastMatch
    • $&
    • 最後にマッチした文字列(Operaは未対応)
  • lastParen
    • &+
    • 最後にマッチした()で囲まれたグループの文字列(Operaは未対応)
  • lastParen
    • パターンマッチした文字列を順に格納(最大9個)

マッチングの成否を検証する

  • testメソッド
    • 与えられた文字列を検索しマッチングの成否を真偽値(true/false)で返す
正規表現オブジェクト.test(検索対象の文字列)
  • String.searchメソッド
    • 指定された正規表現で最初にマッチした文字位置を返す
    • マッチ文字が存在しない場合に戻り値として-1を返す
検索対象の文字列.search(正規表現オブジェクト)

正規表現で文字列を置き換える

  • String.replaceメソッド
    • 正規表現でマッチした文字列を置換する
    • 置換後の文字列には「$1..$9」といった特殊変数を埋め込める
    • この特殊変数はサブマッチ文字列を保存するための変数
置き換え対象の文字列.replace(正規表現オブジェクト, 置換後の文字列)

正規表現で文字列を分割する

  • String.splitメソッド
    • 正規表現で文字列を分割する
    • 戻り値として分割した結果を配列として返す
分割対象の文字列.split(正規表現オブジェクト)



わーああー(・∀・;)