2017-01-27 4 views
2

Ich habe dieses Beispiel: https://jsfiddle.net/xqdwL914/1/Javascript-Zählung Match String-Länge

<div id="test">bar <i>def</i>ghij<br>bar <i>def</i>ghij</div> 

Ich möchte wie diese "bar" Index und Länge in mehreren Vorkommen zu finden:

var node = document.getElementById('test'); 
var text = node.textContent; 
var re = /bar/g; 
while ((match = re.exec(text)) != null) { 

alert("match found at: " + match.index+ " length: " +match.length); 

} 

die Ausgabe:

gefunden am: 0 Länge: 1

gefunden am: 11 leng th: 1

Warum die Länge ist "1" sollte es "3" als drei Zeichen des Wortes "bar" sein und wie bekomme ich den letzten Index jeder Übereinstimmung Wort bar ????

+0

so wie es jede Iteration i zählen würde ?? – jsem

+0

wenn ich es so benutze: alert ("Übereinstimmung gefunden bei:" + match.index + "length:" + text.match (re) .length); es Looping Unendlichkeit .. – jsem

Antwort

0

Von MDN

Wenn das Spiel erfolgreich ist, die exec() Methode gibt ein Array zurück und aktualisiert die Eigenschaften des regulären Ausdrucksobjekts. Das zurückgegebene Array hat den erkannten Text als erstes Element

var text = 'bar <i>def</i>ghij<br>bar <i>def</i>ghij'; 
var re = /bar/g; 
while ((match = re.exec(text)) != null) { 
    console.log("match found at: " + match.index+ " length: " +match[0].length); 
} 

output:

match found at: 0 length: 3 
match found at: 22 length: 3 
0

Zurückgegeben match ist ein Array. Ich verstehe, dass Sie für die Länge der match Saite an der ersten Position suchen (match[0]):

while ((match = re.exec(text)) != null) { 
    alert("match found at: " + match.index+ " length: " +match[0].length); 
} 

enter image description here