読者です 読者をやめる 読者になる 読者になる
スポンサーリンク

JavaScriptの正規表現の中級事項をメモ

javascript 文字列処理

正規表現の基礎を脱して,応用的な情報をメモ。

JavaScriptに限らず,Javaとか他のプログラミング言語でも汎用的に当てはまる。


参考サイト:

JavaScript正規表現メモ。
http://d.hatena.ne.jp/koseki2/2009053...

括弧系

https://developer.mozilla.org/ja/Core...

  • (x)
    • x にマッチし、マッチしたものを記憶します。これはキャプチャする括弧 (capturing parentheses) と呼ばれます。
  • (?:x)
    • x にマッチしますが、マッチしたものを記憶しません。これはキャプチャしない括弧 (non-capturing parentheses) と呼ばれます。
  • x(?=y)
    • x に続いて y が現れる場合にのみ、x にマッチします【訳注: 肯定的前方先読み】
  • x(?!y)
    • x に続いて y が現れない場合にのみ、x にマッチします【訳注: 否定的前方先読み】

キャプチャしない括弧

http://hwat.sakura.ne.jp/hpod/200705/...
ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)' の正規表現の (?:〜)は,キャプチャしないという意味。

肯定的前方先読み

x(?=y)

http://www4.ocn.ne.jp/~kaerume/k2e/re...

  • 「(?=pattern)」はゼロ幅の肯定的先読み表現です。

否定先読み

正規表現で特定の単語を除外したい
http://oshiete.goo.ne.jp/qa/1547202.html

  • java(?!script) javaにマッチしてjavascriptにマッチしない。 「幅ゼロの否定先読み」という呼び方


ある文字列の左側じゃない(否定)
http://yakinikunotare.boo.jp/orebase/...

  • (?!hoge)
    • これは肯定の逆である文字列の左側じゃない部分にマッチします。文字と文字の境界面なんて文字の数だけあるんで、ほとんどどこでもマッチしてしまいます

後方参照

JavaScriptの動かないコード (中級編) 正規表現で同じ文字の連続を検出したい - 置換前パターン中での後方参照
http://language-and-engineering.hatenablog.jp/entry/20080927/1222508705

  • 括弧でキャプチャ済みの文字列を,評価時に「\1」で参照
  • 評価の終了後には「$1」で参照

「前方参照」も同じ事。

正規表現の解説 初級編
http://www4.ocn.ne.jp/~kaerume/k2e/re...
後方参照(前方参照)

  • グループにマッチした文字列を参照すること。
  • ‘後方参照’は‘前方参照’と表現がされる場合があり,同じ事を指す
  • 「マッチした文字列を後から参照する(後ろから参照する)」から‘後方参照’。
  • 「前にマッチした文字列を参照する(前の方を参照する)」から‘前方参照’。

RegExpオブジェクト

状態を持っている

static
http://d.hatena.ne.jp/javascripter/20...

  • 正規表現リテラルは毎回解釈されるわけではなく、一度作られると同じオブジェクトが使われるのでstatic変数のような挙動をする。