33

このトピックが StackOverflow で完全にカバーされていることは知っていますが、正規表現を機能させることはできません。したがって、これ以上苦労することなく...


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

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

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

これは私の式が返すものです:model='cat'

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


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

4

2 に答える 2

47

一致全体は常にグループ 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

フィドル

于 2013-08-12T02:03:40.383 に答える