2012-03-30 16 views
0

mit anderen String ersetzen habe ich eine Zeichenfolge einige HTML-Markup contaning, wie folgt aus:javascript regex - jedes Spiel gegebener Ausdruck

var html = "<div> 
    <img src="http://test.com/image1.png" /> 
    <h1>SOME TEXT</h1> 
    <img src="http://text.com/image2.jpg" /> 
</div>"; 

ich alle URLs in src="..."

ersetzen wollen es in Ordnung ist, wenn i do html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, "SOME_URL");
dann all src="..."src="SOME_URL"

worden Aber jetzt will ich jedes Spiel mit einer anderen Zeichenfolge ersetzen, von einem genommen n Array, aber ich habe Probleme damit.
Ich denke, ich muss eine Funktion für den Ersatz verwenden, aber nicht sicher, wie Sie es implementieren.
Etwas wie:
html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, function ($0, $1){ //what do i do here??? });

Also, wenn ich habe:

var arr = []; 
arr['http://test.com/image1.jpg']='file1'; 
arr['http://test.com/test.jpg']='file3'; 

der String html von oben wird geworden:

"<div> 
    <img src="file1" /> 
    <h1>SOME TEXT</h1> 
    <img src="http://text.com/image2.jpg" /> 
</div>" 

Beachten Sie, dass ‚http://text.com /image2.jpg 'ist kein Schlüssel des Arrays, daher wird es nicht ersetzt.

Jede Hilfe geschätzt, danke im Voraus.

Antwort

1
var html = '<div><img src="http://test.com/image1.jpg" />...</div>'; 

var arr = { 
'http://test.com/image1.jpg' : 'file1', 
'http://test.com/test.jpg' : 'file3' 
} 

html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, function ($0, $1){ 
    return ' src="' + (arr[$1] || $1) + '"'; 
}); 

console.log(html) kehrt

"<div><img src="file1" /><h1>SOME TEXT</h1><img src="http://text.com/image2.jpg" /></div>" 
+0

Einfach perfekt! Ich dachte mir, ich sollte etwas hinein geben (zB $ 0 = arr [$ 1];), hätte an die Rückkehr denken sollen ... Danke, Fabrizio, habe meinen Tag gerettet! – CrisDeBlonde

+0

froh, nützlich zu sein. – fcalderan

1

ich Regex in diesem Fall vergessen würde, wenn Sie ein Array mit allen URLs und ihre individuellen Ersatz in einem Objekt haben, warum etwas nicht tun:

for (i in replaceObj) 
{ 
    html = html.split(i).join(replaceObj[i]); 
} 

versuchte es in der Konsole:

html = '<div><img src="imgs/img.jpg"/></div>'; 
replaceObj = {}; 
replaceObj['imgs/img.jpg'] = 'file'; 
for(i in test){html = html.split(i).join(replaceObj[i])}; 

Ausgabe: <div><img src="file"/></div>. Sie könnten auf und concat teilen. das gleiche, wenn man sich an die Seite der Sicherheit stellt ... aber unterm Strich: Mach es einfach, wann immer du kannst

+1

Danke Elias für die Arbeit mit meiner Frage. Interessanter Ansatz, aber ich möchte, so weit dies möglich ist, mein ursprüngliches Design nicht ändern. Nochmals vielen Dank für die Antwort;) – CrisDeBlonde

+0

Obwohl ich nicht Ihre ursprüngliche Design kennen, und ohne aufdringlich oder beleidigend sein wollen: das einzige, was ich auslasse, ist die Regex, soweit ich das beurteilen kann ... Ich kann ' t help it really ... immer wenn ich sehe, dass jemand regex in Situationen benutzt, wo ich nicht würde, muss ich reagieren ... nenne es OCD wenn du magst ;-) ... viel Glück mit deinem Projekt! –