SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【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

関連するメモ

コメント