キャプチャされていないグループがまだ一致に表示される 質問する

キャプチャされていないグループがまだ一致に表示される 質問する

このトピックは StackOverflow で徹底的に取り上げられていることは知っていますが、どうしても正規表現が機能しません。だから、これ以上繰り返して長々と説明せずに...


これが私が持っているものです。

弦:<p model='cat'></p>

正規表現:.match(/(?:model=')(.*)(?:')/g)

私の式が返すものは次のとおりです:model='cat'

私が欲しいのはこれです:cat


非キャプチャ グループが無視されないのはなぜですか? 非キャプチャ グループが何をするのか理解していないからでしょうか? 正規表現が機能しないのはなぜですか?

ベストアンサー1

試合全体は常にグループ 0 になります。その特定のグループ (この場合は最初のグループはキャプチャされないためグループ 1) にアクセスする必要があります。次のように実行できます。

var str = "<p model='cat'></p>";
var regex = /(?:model=')(.*)(?:')/g
var match = regex.exec(str);
alert(match[1]); // cat

フィドル

また、おそらく str 内で複数の一致が必要なのだと思いますが、次のようにすることができます。

var str = "<p model='cat'></p><p model='dog'></p><p model='horse'></p>";
var regex = /(?:model=')([^']*)/g
var matches = [];
var match;
while (match = regex.exec(str)) {
  matches.push(match[1]);
}
alert(matches); // cat,dog,horse

フィドル

おすすめ記事