2017-06-12 13 views
1

を無視:JavaScriptの正規表現が、私は次の正規表現持ちの場合例外(無効なグループ)

(?i:(?:(?:(?:fbx|fo))\d+)|(?:(09|0[1-5])\s?(?:\d{2}\s?){4})(?:(@freeadsl)?)) 

を私はhttps://regex101.com/で式をテストし、それが動作します。

enter image description here

しかし、JavaScriptでは、それはうまくいきません。 enter image description here

JavaScriptを使用して正規表現を無視する問題は、?iであることが判明しました。

この問題を解決する最適な方法は何ですか? 助けていただければ幸いです。

+0

JS正規表現はインライン修飾子をサポートしていません。 –

答えて

1

JavaScript regexエンジンは、インライン修飾子グループをサポートしていません。あなたはregex demoを参照してくださいJSの正規表現でi修飾子を使用して

var rx = /(?:fbx|fo)\d+|(?:09|0[1-5])\s?(?:\d{2}\s?){4}(?:@freeadsl)?/i; 
                    ^

にあなたの正規表現を減らすために、不要な非キャプチャグループを削除することができます。最後の/iは、パターン内の文字を大文字と小文字の両方に一致させます。

詳細は:

  • (?:fbx|fo)\d+から15に数字が続く09ストリングまたは0 - 又は
  • (?:09|0[1-5])からfbxまたはfoサブ1+数字
  • |
  • と続きます。
  • \s? - オプション(1又は0)空白
  • (?:\d{2}\s?){4} - の4出現 - 2桁の数字
  • \s? - オプション(1又は0)空白
    • \d{2}(?:@freeadsl)? - オプションの@freeadslサブストリング。
  • +0

    良い通話のクリーニング。今よりはるかに読みやすい;) – Thomas

    +1

    @Wiktorへの返答ありがとうございます。ちょうど情報のために、私はバックエンドから正規表現を得る、私はそれを変更することはできませんが、私はあなたの正規表現が良いことを参照してください、私はデベロッパーをバックエンドに話をするつもりです。ご協力ありがとうございました –