4

私が試したこと

var test = "asdfdas ABCD EFGH";
var regex = /^\S+( [A-Z]{4})+$/; 
    // Also tried: /^\S+( [A-Z]{4})+$/g
    // And: /^\S+( [A-Z]{4})+?$/g
var matches = test.match(regex);

JSFiddleを作成しました。

私が期待すること

変数matchesは次の配列になります。

[
  "asdfdas ABCD EFGH",
  " ABCD",
  " EFGH"
]

私が得るもの

変数matchesは実際には次の配列です。

[
  "asdfdas ABCD EFGH",
  " EFGH"
]

私の考え

私の推測では、キャプチャ グループや$ロジックに欠けているものがあると思います。どんな助けでも大歓迎です。(複数の正規表現でこれを行う方法を理解できることは知っていますが、ここで何が起こっているのかを理解したいです。)

4

1 に答える 1

3

はい、まさにその通りです。あなたは何も悪いことをしていません。グループに量指定子が与えられると、最後の一致のみがキャプチャされます。それが JavaScript で行うすべてのことです。一般的な修正は、あなたが言ったように、複数の正規表現を使用することです。

var test = "asdfdas ABCD EFGH";
var match = test.match(/^\S+((?: [A-Z]{4})+)$/); // capture all repetitions
var matches = match[1].match(/ [A-Z]{4}/g); // match again to get individual ones
于 2014-11-25T16:09:50.843 に答える