2012-04-02 15 views
1

Ich möchte eine Suche und ersetzen in einer Zeichenfolge. Es sucht nach jedem Wort, das mit "$" beginnt und es durch einen Wert aus einem Array ersetzt. Zum Beispiel, wenn die Zeichenfolge ist:Javascript ersetzen Teile der Zeichenfolge zu Variablen

[div class='news'][h4]$title[/h4][p]$desc[/p][/div] 

Es ersetzt [], um <> (bereits geschehen). Aber dann möchte ich $ title durch Daten aus einem Array ersetzen. So würden Daten ["title"] und dann $ desc durch Daten ["desc"] ersetzt werden. Der Code, den ich bisher habe, ist

var obj = $('#'+id); 
var url = $(obj).attr('loadJSON'); 
var format = $(obj).attr('responseFormat'); 
$.getJSON(url, function(data) { 
    var html = ""; 
    for(var i=0;i<data.length;i++) { 
     var tmp = format; 
     tmp = tmp.replace(/\[+(.*?)\]+/g,"<$1>"); 
     tmp = tmp.replace(); 
    } 
}); 

Das Format die Zeichenfolge ist, das es ersetzt in, und Daten (aus der JSON-Antwort) ist die Matrix, die ich die Variablen will zu ändern.

Könnte jemand bitte mir dabei helfen? Vielen Dank im Voraus

Antwort

4

dann als letzte Ersatz

tmp = tmp.replace(/\$([a-z]+)/gi, function(match, v) { 
    return data[v] || v; 
}) 

Notiz hinzufügen, dass im Falle von data[v] undefiniert Sie etwas anderes wie data[v] || ["not found", v].join(' ') zurückkehren konnte nur zu verfolgen, welche Variable fehlt

+0

Das funktioniert perfekt, danke :) –

+0

als beiseite Vorschlag, den Sie könnten * verwenden {$ var} * statt, da ein breiteres verwendetes syttax in microtemplating – fcalderan

+0

würde ich tun, aber die HTML-Dateien werden von PHP zuerst erzeugt, unter Verwendung eines Schablonensystems, das bereits {$ var} verwendet, also musste ich etwas etwas anderes verwenden. Danke für den Vorschlag obwohl –

0

Ich bin kein JS Experte, aber das sieht in vielerlei Hinsicht falsch aus ... Ihr Datenobjekt sollte ein JS-Objekt sein, das ist etwa { title: 'Generic title.', description: 'It's a generic title' }.

Warum nicht die Werte in Absatzelemente, und fügen Sie diese in die div (d. H., Sie fügen sie an). Etwas wie folgt aus:

$.getJSON(url, function(data) { 
    $('div.news').append($('<p />').text(data.title)); 
    $('div.news').append($('<p />').txt(data.description)); 
}); 
+1

Das Datenobjekt ist ein JS-Objekt, das über AJAX von einer externen Quelle geladen wurde, und ich wollte das in einer Funktion, die leicht integriert werden konnte, um externen Inhalt in jedem conatainer zu formatieren. So könnte ich zum Beispiel die gleiche JS-Funktion verwenden, um Daten zu laden und in eine Tabelle einzufügen. –

0

Sie

tun konnte
tmp = tmp.replace(/\$([a-z]+)/gi, function(match) { 
    match = match.replace('$', ''); 
    return (data[match] || match) 
}); 

http://jsfiddle.net/uZbk8/

+0

Wenn Sie eine einfangende Gruppe verwenden, können Sie einen anderen Parameter an den Rückruf übergeben und einen inneren Ersatz vermeiden. – fcalderan

+0

@FabrizioCalderan Ja, ich sah (und upvoted) deine Antwort, es ist viel besser! :) –

Verwandte Themen