1. ホーム
  2. javascript

[解決済み] JavaScriptで正規表現リテラルを連結する方法は?

2022-04-23 16:17:50

質問

このようなことは可能でしょうか?

var pattern = /some regex segment/ + /* comment here */
    /another segment/;

それとも、新しい RegExp() の構文で、文字列を連結するのですか?私は、コードがより自明で簡潔であるため、リテラルを使用することを希望します。

どのように解決するのですか?

ここでは、正規表現リテラルの構文を使わずに正規表現を作成する方法を紹介します。これにより、正規表現オブジェクトになる前に任意の文字列操作を行うことができます。

var segment_part = "some bit of the regexp";
var pattern = new RegExp("some regex segment" + /*comment here */
              segment_part + /* that was defined just now */
              "another segment");

2つの正規表現リテラルがある場合、実際にはこのテクニックを使ってそれらを連結することができます。

var regex1 = /foo/g;
var regex2 = /bar/y;
var flags = (regex1.flags + regex2.flags).split("").sort().join("").replace(/(.)(?=.*\1)/g, "");
var regex3 = new RegExp(expression_one.source + expression_two.source, flags);
// regex3 is now /foobar/gy

式1と式2がリテラル正規表現ではなくリテラル文字列であることよりも、ただ語感が良いだけです。