Javascript Regexp-Schleife alle Spiele
Ich versuche, etwas ähnliches zu tun mit stack-overflow-s rich-text-editor. Angesichts dieses Textes:
[Text Example][1]
[1][http://www.example.com]
Möchte ich Schleife jedes [string][int]
finden, was ich zu tun auf diese Weise:
JS:
var Text = "[Text Example][1]\n[1][http: //www.example.com]";
//Find resource links
var arrMatch = null;
var rePattern = new RegExp(
"\\[(.+?)\\]\\[([0-9]+)\\]",
"gi"
);
while (arrMatch = rePattern.exec(Text)) {
console.log("ok");
}
Diese großen Werke, es meldet " ok " für jede [string][int]
. Was muss ich aber tun, ist für jede übereinstimmung gefunden wird, ersetzen Sie den ersten match mit den Komponenten des zweiten Partie.
Also in der Schleife $2 darstellen würde den int-Teil ursprünglich abgestimmt, und ich würde diese regexp (pseduo)
while (arrMatch = rePattern.exec(Text)) {
var FindIndex = $2; //This would be 1 in our example
new RegExp("\\[" + FindIndex + "\\]\\[(.+?)\\]", "g")
//Replace original match now with hyperlink
}
Diese würde mit
[1][http://www.example.com]
Ergebnis für das erste Beispiel wäre:
<a href="http://www.example.com" rel="nofollow">Text Example</a>
Bearbeiten
Habe ich bekommen, soweit Sie dies jetzt:
JS:
var Text = "[Text Example][1]\n[1][http: //www.example.com]";
//Find resource links
reg = new RegExp(
"\\[(.+?)\\]\\[([0-9]+)\\]",
"gi");
var result;
while ((result = reg.exec(Text)) !== null) {
var LinkText = result[1];
var Match = result[0];
Text = Text.replace(new RegExp(Match, "g"), '<a href="#">" + LinkText + "</a>');
}
console.log(Text);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Stimme mit Jason, es wäre schneller/sicherer zu verwenden, eine vorhandene Markdown-Bibliothek, aber Sie sind auf der Suche nach String.der Prototyp.ersetzen (auch verwenden Sie RegExp-Literale!):
JS:
Habe ich es geschafft am Ende mit diesem:
JS:
Hier sind wir mit exec Methode, hilft es, um alle Spiele (mit Hilfe einer while-Schleife) und position der gefundenen Zeichenkette.
Dieses format basiert auf Markdown. Es gibt einige JavaScript-ports zur Verfügung. Wenn Sie nicht möchten, dass die ganze syntax, dann empfehle ich stehlen die Teile im Zusammenhang zu links.
Hier somw kleinen Beispiel hoffe ich, dass Sie nützlich finden können.
\number
verwendet wird, in regex zum finden einer Gruppe übereinstimmen Anzahl und$number
wird in der ersetzen-Funktion zu beziehen, Ergebnisse zusammenfassen, so können Sie erzwingen, dass die zahlen gleich mit so etwas wie, dass, wenn Ihr text istwird es passen und wenn es
es nicht
JS:
Einen anderen Weg zu iterieren über alle matches, ohne dabei auf exec, und match-Feinheiten, ist mit der string Funktion replace mit regex als ersten parameter und eine Funktion, als der zweite. Wenn so wie hier verwendet, ist die Funktion-argument erhält, das ganze match als ersten parameter, wird die Gruppen-Spiele als nächsten Parameter und der index wird wie das Letzte:
Kann man auch iterieren über alle Gruppen jedes Spiel über das Globale JS-variable
arguments
, mit Ausnahme des ersten und letzten.