2010-12-06 11 views

Antwort

2

indexOf() sollten Sie geben, was Sie wollen:

var index = str.indexOf(match[1]); 

jsFiddle example

Wenn Sie durch jedes Spiel in einer Schleife, benötigen Sie einen g Modifikator auf Ihre regex hinzufügen , durchlaufen Sie es und rufen Sie jedes Mal indexOf(). In Ihrer Schleife übergeben Sie ein zweites Argument an indexOf(), um ihm zu sagen, wo er anfangen soll.

var str = "hello world hello world"; 
var regex = /lo (wo)/g; 
var match; 
var prevIndex, currIndex; 
var indexes = []; 

while (match = regex.exec(str)) { 
    currIndex = str.indexOf(match[1], prevIndex); 
    indexes.push(currIndex); 
    prevIndex = regex.lastIndex; 
} 

jsFiddle example

+1

Dies wird fehlschlagen, wenn es mehrere Übereinstimmungen gibt, und ich Schleife durch alle von ihnen. z.B. '" Hallo Welt Hallo Welt "'. Weißt du, wenn ich das zweite Match verarbeite, ist die Aufnahme die selbe, also denke ich, dass diese Methode nicht zuverlässig ist. –

+0

@jiewmeng: Es ist zuverlässig, wenn du es richtig machst. Sie müssen über alle Übereinstimmungen iterieren und den Startindex jedes Mal um den letzten Index erhöhen, wenn eine Übereinstimmung gefunden wird. Sie erhalten genaue Ergebnisse. – jwueller

+0

@jiewmeng: Siehe meine aktualisierte Antwort für das Durchlaufen der Matches. – BoltClock

Verwandte Themen