1. ホーム
  2. javascript

[解決済み] RegExpのexec()関数とStringのmatch()関数の違いは何ですか?

2022-06-10 04:19:39

質問

これを実行すると

/([^\/]+)+/g.exec('/a/b/c/d');

こんなの出るんだ。

["a", "a"]

でも、これを実行すると

'/a/b/c/d'.match(/([^\/]+)+/g);

すると、こんな期待通りの結果が得られます。

["a", "b", "c", "d"]

何が違うの?

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

exec をグローバルな正規表現で使用する場合は、 ループ内で使用することを想定しています。つまり

var re = /[^\/]+/g;
var match;

while (match = re.exec('/a/b/c/d')) {
    // match is now the next match, in array form.
}

// No more matches.

String.match がこれを行ない、捕捉したグループを破棄します。