2

どして:

/(\[#([0-9]{8})\])/g.exec("[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]")

戻る

["[#12345678]"、 "[#12345678]"、 "12345678"]

それらすべての数字に一致させたいのですが、貪欲すぎるようです。

[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355] 12345678 87654321 56233001 36381069 23416459 56435355

4

5 に答える 5

5

それがどのように機能するか.exec()です。複数の結果を得るには、ループで実行します。

var re = /(\[#([0-9]{8})\])/g,
    str = "[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]",
    match;

while (match = re.exec(str)) {
    console.log(match);
}

また、外側のキャプチャグループは無関係のようです。あなたはおそらくそれを取り除くべきです。

/\[#([0-9]{8})\]/g,

結果:

[
    "[#12345678]",
    "12345678"
],
[
    "[#87654321]",
    "87654321"
],
[
    "[#56233001]",
    "56233001"
],
[
    "[#36381069]",
    "36381069"
],
[
    "[#23416459]",
    "23416459"
],
[
    "[#56435355]",
    "56435355"
]
于 2012-09-12T15:08:39.170 に答える
1

regex.exec正規表現内のグループ(括弧で囲まれたもの)を返します。

探している関数は、文字列で呼び出す関数ですmatch

string.match(regex)すべての一致を返します。

"[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]".match(/(\[#([0-9]{8})\])/g)
// yields: ["[#12345678]", "[#87654321]", "[#56233001]", "[#36381069]", "[#23416459]", "[#56435355]"]

編集:

角かっこと#のない数字だけが必要な場合は、正規表現を次のように変更します。/\d{8}/g

"[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]".match(/[0-9]{8}/g)
// yields: ["12345678", "87654321", "56233001", "36381069", "23416459", "56435355"]
于 2012-09-12T15:11:55.347 に答える
1

文字列のメソッドを使用replaceして、すべての一致を収集できます。

var s = "[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]";
var re = /\[#([0-9]{8})\]/g;
var l = [];
s.replace(re, function($0, $1) {l.push($1)});
// l == ["12345678", "87654321", "56233001", "36381069", "23416459", "56435355"]
于 2012-09-12T15:14:58.697 に答える
0

これを試して:

    var re = /\[#(\d{8})\]/g;
    var sourcestring = "[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]";
    var results = [];
    var i = 0;
    var matches;
    while (matches = re.exec(sourcestring)) {
        results[i] = matches;
        alert(results[i][1]);
        i++;
    }
于 2012-09-12T17:11:50.723 に答える
0

ES2020には、 matchAllwitchが機能する新機能が追加されています。

于 2020-10-30T11:43:03.530 に答える