2017-03-22 4 views
0

Ich habe Dokumente, in denen ich hervorheben muss, dass eine Person zitiert wurde. Also habe ich mich für alle Texte, die von Anführungszeichen eingeschlossen ist ... Ich bin den Code unten verwenden, die funktioniert, aber es fängt nur das erste Vorkommen ..RegEx - Finden Sie alle Sätze von Anführungszeichen

var str = 'L\'armée sud-coréenne accuse la Corée du Nord d\'avoir lancé \"plusieurs\" missiles \"balistiques interdits qui ont franchi une distance\" d\'environ 1000 kilomètres avant de tomber au \"large de la côte est du pays communiste.\" ' 

var reg = new RegExp(/"(.*?)"/); 
var matches = str.match(reg); 

for (var i = 0; i < matches.length; i++) { 
    var s = matches[i]; 
    str = str.replace(matches[i], '<span style="color:blue">' + matches[i] + '</span>'); 
    matches[i] = s; 
} 
+1

Es ist sinnlos, eine Zeichenfolge zu testen, mit 'String.prototype.match', bevor ein Ersatz zu tun. Verwenden Sie 'String.prototype.replace' direkt. –

Antwort

2

Machen Sie Ihre Regex global:

Der Modifikator g wird verwendet, um eine globale Übereinstimmung durchzuführen (alle Übereinstimmungen finden statt nach der ersten Übereinstimmung anzuhalten).

var str = 'L\'armée sud-coréenne accuse la Corée du Nord d\'avoir lancé \"plusieurs\" missiles \"balistiques interdits qui ont franchi une distance\" d\'environ 1000 kilomètres avant de tomber au \"large de la côte est du pays communiste.\" ' 

var reg = new RegExp(/"(.*?)"/g); //notice /g, making the expression global 
var matches = str.match(reg); 

for (var i = 0; i < matches.length; i++) { 
    var s = matches[i]; 
    str = str.replace(matches[i], '<span style="color:blue">' + matches[i] + '</span>'); 
    matches[i] = s; 
} 

document.getElementById("myDiv").innerHTML = str; 

machen Ihren Ausdruck globalen Garantien alle Instanzen der Anführungszeichen übereinstimmen.

JSFiddle: https://jsfiddle.net/zjxjub96/

Um zu zeigen, was @Casimir in seinem Kommentar sagt, hier ist ein kleines Beispiel:

var str = 'L\'armée sud-coréenne accuse la Corée du Nord d\'avoir lancé \"plusieurs\" missiles \"balistiques interdits qui ont franchi une distance\" d\'environ 1000 kilomètres avant de tomber au \"large de la côte est du pays communiste.\" ' 
 
str = str.replace(/"(.*?)"/g, '<span style="color:blue">$&</span>') 
 
document.getElementById("myDiv").innerHTML = str;
<div id="myDiv"> 
 

 
</div>

Beachten Sie, dass diese Art und Weise ist einfacher, und doesn‘ t benötigen eine for-Schleife.

JSFiddle: https://jsfiddle.net/zjxjub96/1/

+1

Wow, so einfach, wenn du weißt, wie ... Ich begann Schleifen zu machen und was nicht ... thx !! –

Verwandte Themen