LoginSignup
0
0

More than 3 years have passed since last update.

[JavaScript] 正規表現の Firefox 限定問題の回避方法 (flags s)

Last updated at Posted at 2020-06-01

概要

  • JavaScript の正規表現で flags の一部にブラウザ依存があり、それの回避方法を説明します。

Firefox で生じる問題

  • 以下のコードは Google Chrome と Safari では動作しますが、Firefox では動作しません。
const str = `aaa
bbb
ccc`

str.match(/.{11}/s)
  • 正規表現の説明。
    1. 正規表現中の . は、ディフォルトでは「改行以外の任意の一文字」にマッチします。
    2. /.{11}/ は「11文字の長さの文字列」にマッチします。
    3. /.{11}/s の最後の s は正規表現の flags で、「正規表現中の . を、改行文字にもマッチさせる」と云う指定です。
    4. aaa ... ccc は、アルファベット9文字と aaabbb の後ろの改行を含めて11文字あります。

原因

  • flags の s は比較的新しい仕様で、Firefox (v76.0.1) が未対応のため。

    (2020/06/01 現在)

  • Firefox の例外

const str = `aaa
bbb
ccc`

str.match(/.{11}/s)
// SyntaxError: invalid regular expression flag s

回避策

  1. flags に m を指定する。(複数行指定)
    コメントでご指摘いただいた通り、不要でした。
  2. . の代わりに [^] を使う。
const str = `aaa
bbb
ccc`

str.match(/[^]{11}/)
  • Q.E.D.

  • [^] の意味が知りたい方は、最寄りの StewEucen までお尋ね下さいな。

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0