【JavaScript】改行を含めてマッチする正規表現
問題
※ES2018 以前の話
JavaScriptの正規表現で、改行を含めてマッチさせたいんですけど、
.(ドット)を改行にマッチさせるすべはないですか?
例)HTMLでdivタグに囲まれた箇所
/<div>.*<\/div>/
答え
JavaScriptの.(ドット)は改行にマッチしない。
マッチさせるフラグもない。
改行含めてすべての文字にマッチさせるには、「空白文字または空白文字以外」という表現になる。
[\s\S]
IEの古いバージョン以外なら以下でもOK
[^]
「divタグに囲まれた箇所(改行を含む)」であれば、以下のようにするとよい。
/<div>[\s\S]*<\/div>/
/<div>[^]*<\/div>/
注意) <div class=”xxx”></div> にはマッチしないので用途に応じて考えること
使用例)
html.replace(/<div>[\s\S]*<\/div>/g, '')
html.replace(/<div>[^]*<\/div>/g, '')
文字クラス \s (小文字s)
スペース、タブ、改ページ、改行を含むホワイトスペース文字にマッチします。[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] に相当します。例えば /\s\w*/ は “foo bar” の ” bar” にマッチします。
文字クラス \S (大文字S)
ホワイトスペース以外の文字にマッチします。[^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] に相当します。例えば /\S\w*/ は “foo bar” の “foo” にマッチします。
[^]
何もないの否定(^)ですべての文字。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes
コメント