改行入りテンプレートリテラルのマッチ
問題:JavaScriptの正規表現で以下の改行入りテンプレートリテラルの文字列をtestメソッドで最新のChromeとFirefoxでマッチするには①に何を入れるのが正しいでしょうか?
var str = `foo bar` console.log(①.test(str))
- /foo.+/
- /foo[.\r]+/
- /foo.+/m
- /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で省略