2012-04-18 4 views
1

何か間違っているのですか、それともGoogle Chromesの問題ですか?
キャプチャしていないグループとキャプチャしていないグループを使用している場合と同じ効果があります。Google Chromeの拡張機能が正規表現のグローバルフラグを無効にする

RegExrは、最初に期待される結果を示します。 http://regexr.com?30mjo

var text = 'startdate: 123456, enddate: 789012'; 
var unix = text.match(/(?:start|end)date: (\d+)/g); 
console.log(unix); 

実際の結果

["startdate: 123456", "enddate: 789012"] 

期待される結果

["123456", "789012"] or 
["startdate: 123456", "123456", "enddate: 789012", "789012"] 
+0

それは奇妙な行動作って 'G'旗のように思えます。それがなければ、最初の結果は正常に返されます。私はもっ​​と調査します。 – david

+0

'g 'を使用すると'(\ d +) 'の後にコンマを追加することはできますか? '...(\ d +)、/ g);'?実際には違いはありません.... – Kasapo

答えて

1

このように動作するはずです。

該当する行はresultthe ecmascript specの146ページ

4. Let matchStr be the result of calling the [[Get]] internal method of result with argument "0"

は、あなたが戻ってexecを呼び出してから取得配列です。

私は手動でのexecを呼び出し、そうのような結果を収集以外に、この作品を作るための方法を見つけることができませんしてきた:

var regex = /(?:start|end)date: (\d+)/g; 
var text = 'startdate: 123456, enddate: 789012'; 

var result; 
var unix = []; 

while(result = regex.exec(text)){  
    unix.push(result[1]); 
} 

console.log(unix); 
+0

この代替ソリューションを使用しても動作しますが、ループしていたので、グローバルフラグを作成していないと考えました。しかし、それは大きな間違いでした!それは無限ループに変わり、最初の試合を何度も何度も何度も繰り返して続けました。 – Kim

-1

あなたは何か間違ったことをやっています。

これはどうですか?

/((?:start|end)date: (\d+))/g 
+0

キャプチャしていないグループを動作させる方法を教えてください。 – nnnnnn

+0

'/(start | end)date:(\ d +)/ g' 2番目(または偶数番目)の一致するグループのみを使用するのはなぜですか?これは、開始日/終了日がオプションでない限り機能しません。結果をループして、あなたのインクリメントに 'i + = 2'を使用し、グループ2,4,6などを取得します。 – Kasapo

関連する問題