Ich habe eine Zeichenfolge, die in etwa so aussieht wie der folgende 'test: 1; hallo: fünf; nur: 23'. Mit dieser Zeichenfolge muss ich Folgendes tun können.Javascript Token ersetzen/anhängen
....
var test = MergeTokens('test:1;hello:five;just:23', 'yes:23;test:567');
...
Das Endergebnis sollte 'Test: 567; hallo: fünf, nur: 23, ja: 23' sein (beachten Sie die genaue Reihenfolge der Token ist nicht so wichtig).
Ich frage mich nur, ob jemand irgendwelche kluge Ideen hat, wie man das macht. Ich dachte, ein Regex würde auf jedem der Token auf der rechten Seite ersetzen und wenn ein Ersetzen nicht stattfinden würde, weil es keine Übereinstimmung gab, einfach anhängen. Aber vielleicht gibt es einen besseren Weg.
Prost Anthony
Edit: Die rechte Seite sollte die linke außer Kraft setzen. Das Linke ist das, was ursprünglich dort war, und die rechte Seite ist der neue Inhalt. Eine andere Betrachtungsweise ist, dass Sie die Token nur links behalten, wenn sie nicht rechts vorhanden sind und Sie alle Token auf der rechten Seite behalten.
@ Ferdinand Danke für die Antwort. Das Problem ist die Effizienz, mit der die Lösung, die Sie vorgeschlagen haben. Ich dachte zuerst über ähnliche Zeilen nach, aber diskontierte sie aufgrund der O (n * z) -Komplexität der Zusammenführung (wobei n und z jeweils die Zahlentoken links und rechts sind), geschweige denn das Teilen und Verbinden.
Deshalb, warum ich versuchte, den Weg einer Regex hinunter zu schauen. Vielleicht ist regex hinter den Kulissen genauso schlimm oder schlechter, aber mit einer Regex, die ein Token aus der linken Zeichenfolge entfernt, die auf der rechten Seite (O (n) für die Gesamtmenge von Token auf der rechten Seite) und fügen Sie einfach die 2 string zusammen (dh vat test = test1 + test2) scheint effizienter.
dank
Lookup in einem Hash-Tabelle (JavaScript Object) O (1), so ist die Zusammenführungsoperation linear, nicht O (n²). Sie können nicht wirklich besser als das tun, selbst wenn Regex die Macht hatte, zu tun, was Sie wollten (was es nicht kann). – bobince
cool das ist etwas, was ich wusste ... – vdhant