2017-05-29 3 views
1

Also mein aktuelles HTML sieht aus wieJavascript entspricht mehreren Vorkommen in einer Zeichenfolge?

<p class="comment-post-text">@333<br /> @44<br />@564</p> 

Ich versuche, Links zu erstellen, die

@333 @44 @564 

jedoch

@333 @333 @333 

ist mein Ergebnis wie

aussieht und ich bin mit Regex zu verifizieren Sie, dass, wenn eine Zahl hinter dem @ Symbol steht, der Text in einen Link umgewandelt und mit dem Hash des nächsten Posts verknüpft wird. Es ist mehr oder weniger ein Zitat-System. Mein Problem ist, dass es anscheinend nur mit dem ersten Vorkommen meiner Regex übereinstimmt, anstatt für jedes Vorkommen zu passen.

$('.comment-post-text').each(function(index) { 
    let text = $(this).text(); 
    let matches = text.match(/@(\d+)/); 

     if(matches !== null){ 
     console.log(matches); 
     let newText = replaceAll(text, /@(\d+)/, "<a href = '#pi_" + matches[1] + "'>" + matches[0] + "</a><br/>"); 
     $(this).replaceWith(newText); 

     } 
    }); 

    function replaceAll(str, find, replace) { 
    return str.replace(new RegExp(find, 'g'), replace); 
} 

Das Problem ist, das Auftreten hier bei matches[1] es nur ist das erste Vorkommen des Musters erfassen würde so Looping durch die Streichhölzer Array nutzlos. Gibt es eine Möglichkeit, das Übereinstimmungsarray bei jedem Auftreten der Übereinstimmung zu halten? Jede Hilfe sehr geschätzt.

Antwort

1

Sie müssen die Methode String.prototype.match nicht verwenden, um zu prüfen, ob etwas zu ersetzen ist. Verwenden Sie die Methode String.prototype.replace direkt mit einer Rückreferenz für die erste Erfassungsgruppe $1 und die gesamte Übereinstimmung $& im Ersetzungsstring.

$('.comment-post-text').each(function(index) { 
    let text = $(this).text(); 
    let newText = text.replace(/@(\d+)/g, "<a href = '#pi_$1'>$&</a><br/>"); 
    $(this).replaceWith(newText); 
}); 
+0

ersetze 'ersetzen' durch' ersetzenAlle' und es funktioniert perfekt! Vielen Dank. – Tony

+0

@Tony: Aktualisieren Sie die Seite und Sie werden verstehen, dass die 'replaceAll' Methode nicht sinnvoll ist * (da es nur ein Flag im Muster ist) * –

+0

ersetzen funktioniert nicht für mich, ich bekomme' ersetzen ist nicht definiert' – Tony

Verwandte Themen