JavaScript正規表現で改行入りテンプレートリテラルのマッチ方法

改行入りテンプレートリテラルのマッチ

問題:JavaScriptの正規表現で以下の改行入りテンプレートリテラルの文字列をtestメソッドで最新のChromeとFirefoxでマッチするには①に何を入れるのが正しいでしょうか?

var str = `foo
  bar`
  console.log(①.test(str))
  1. /foo.+/
  2. /foo[.\r]+/
  3. /foo.+/m
  4. /foo.+/s
正解はこちらをクリック
答え:/foo[.\s]+/ (1から4から選べとは書いていない)

問題の解説

まず1.の/foo.+/は.(ドット)が改行コードにマッチしないので不正解。

正規表現初心者の方だと.(ドット)は何にでもマッチすると勘違いされていることが多い。

2.の/foo[.\r]+/ は、\nもなければマッチしないので不正解。

3. の/foo.+/m のmフラグは「改行検索」ではなく「複数行検索」であり、改行コードにマッチしないので不正解。(これも結構勘違いされる)

4. の/foo.+/s のsフラグは「.を改行文字と一致」するためのフラグなのでChromeであればこれでマッチするが、最新のFirefox(v76)で非対応なので不正解となる。

s (dotAll) flag for regular expressions

以上により、1文字以上の改行コードを含む文字列にマッチする /foo[.\s]+/ が正解となる。

※ \r\nは\sで省略