このトピックは 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