2013-08-12 17 views
15

このトピックはStackOverflowで完全にカバーされていますが、私の人生では正規表現を動作させることができません。だから、それ以上の反復的な騒ぎをすることなく...Javascriptノンキャプチャ正規表現


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

文字列:<p model='cat'></p>

正規表現:なぜ私の非ではありませんcat


model='cat'

これは私が欲しいものです:.match(/(?:model=')(.*)(?:')/g)

これは私の式が返すものですキャプチャグループは無視されますか?それは私が非キャプチャグループが何を理解していないですか?私のRegexはなぜ機能していないのですか?

答えて

23

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

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

Fiddle

また、私はあなたがおそらくあなたは、このようにそれを行うことができ、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 

Fiddle

+0

奇妙な..あなたが私が入力しているものを見ることができたように..モデル名さえも同じです。ありがとう! – vin

+0

'/ model = '(。*)'/g'と' match [1] 'でマッチしないで動作します。 –

+1

通常、あなたが実際にグループが必要なことをする必要がある – smerny