複数行にマッチさせる正規表現
JavaScriptで複数行にマッチさせる方法が分かりません。
やむを得ず次のように改行を「@」などの文字に変換してからマッチさせていました。
saki=moto.match(/.*/);
これだと文字列に元々「@」が含まれているとアウトです。
「.*」だと複数行にマッチしないのは「.」が「改行を除く任意の1文字」を表すためです。
そこで次のようにします。
「改行」または「改行を除く任意の1文字」となってマッチします(「\r」を含める場合もあるかもしれません)。
このように悩んでいたのですが、スマートな解決策がありました。それもマイクロソフトのサイトに。
正規表現の構文
「.」
'\n'を除く任意の1文字に一致します。'\n'を含めて任意の文字と一致させるには、'[\s\S]'などのパターンを指定します。
よく見ているページなのに見落としていました。
つまり次のようにすればよいのです。
マイクロソフトの説明は次の通りです。
「\s」
空白、タブ、フォーム フィードなどの任意の空白文字と一致します。[ \f\n\r\t\v]と同じ意味です。
「\S」
空白文字以外の任意の文字と一致します。[^ \f\n\r\t\v]と同じ意味です。
「\s」が改行文字などを含む空白文字、「\S」が「\s」以外の任意の文字というわけですから、両方を使えば「改行を含む任意の1文字」となります。
なお、本件に関して、フラグに「m」を使う方法はJavaScriptではうまくいきません。
[ 2012年7月28日 | カテゴリー: JavaScript | タグ: 正規表現 ]
« SQLで順位を付ける方法 | 区が最も多いのは大阪市 »
コメント
-
今まで悩まされていた任意の複数行を飛ばして抽出する方法が分かってとても勉強になりました。しかし、こんなにも簡単な方法だったとは思いもしませんでした。感謝感激!
これは、すばらしい情報です!
この情報にどれくらい助けられたことか。
どうもありがとうございました。