Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2008 February 13th Wednesday

JavaScriptで改行にもマッチする正規表現

| 20:04 | JavaScriptで改行にもマッチする正規表現 - FFFF を含むブックマーク はてなブックマーク - JavaScriptで改行にもマッチする正規表現 - FFFF

今まで、

/([\n\r]|.)*/

こう書いてたんだけど、

/[\s\S]*/

こう書けることをjAutoPagerizeのソースで知った。

追記&補足

少しブクマされていて、知らなかったのは自分だけではなかったのかなと少し安心。[\s\S]の元ネタはdrryさんとのことです。([\n\r]|.)*はd:id:ofk さんのno titleで知りました。

で、改行にもマッチする正規表現はわかりやすいようで、微妙にわかりにくい気がするので補足。というか、実例で確認する。

  • まず、改行を含む文字列としてbodyのinnerHTMLを見てみる
javascript:alert(document.body.innerHTML);
  • 単純に.*でマッチしてみる
javascript:alert(document.body.innerHTML.match(/.*/));
//最初の行しかマッチしない
  • mオプション(複数行に対して検索するオプション)をつけてみる
javascript:alert(document.body.innerHTML.match(/.*/m));
//同じく、最初の行しかマッチしない
javascript:alert(document.body.innerHTML.match(/([\n\r]|.)*/));
//innerHTML全体がマッチする
  • \s\Sを使う
javascript:alert(document.body.innerHTML.match(/[\s\S]*/));
//innerHTML全体がマッチする

ついでなので、mオプションについて復習しておくと、

m を指定すると、行頭(^)や行末($)のマッチングが文字列の先頭・末尾だけではなく、各行の行頭・行末にもマッチするようになります。Internet Explorer 5.5(?)、Netscape 6 から使用可能です。

http://www.tohoho-web.com/js/regexp.htmより

mをつけると.が改行にもマッチするようになる言語もあるみたいですが、JavaScriptではそういった動作はありません。

javascript:alert(document.body.innerHTML.match(/^<.*/));
//1行目が < で始まっている場合のみマッチ
javascript:alert(document.body.innerHTML.match(/^<.*/m));
//各行において < で始まっている場合マッチ

そうそう2010/06/19 23:26ありがとう。スーパー助かった

fokotatefokotate2011/11/08 09:10参考になりました。ありがとうございます。

sutara_lumpursutara_lumpur2012/01/23 17:37この正規表現はPHPでも使えますね。本当に助かりました。

nudorunudoru2013/02/28 17:10これは助かる><