2012-04-02 95 views
1

我希望執行搜索並替換爲字符串。它搜索任何以「$」開頭的單詞並將其替換爲數組中的值。例如,如果字符串是:Javascript將字符串的部分替換爲變量

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

它將[]更換爲<>(已完成)。但是,我希望它用數組中的數據替換$ title。所以data [「title」]和$ desc將被數據[「desc」]替代。 代碼我迄今爲止是

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(); 
    } 
}); 

格式是它將替換字符串,和數據(從JSON響應)是我想要的變量發生變化到陣列。

有人可以幫助我嗎?在此先感謝

回答

4

再加入如上次更換

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

注意,在data[v]情況下是不明確的,你可以返回別的東西像data[v] || ["not found", v].join(' ')只是跟蹤哪些變量缺失

+0

這完美的作品,謝謝:) – 2012-04-02 12:39:14

+0

作爲預留建議你可以使用* {$ VAR} *代替,因爲microtemplating中更廣泛的使用sytntax – fcalderan 2012-04-02 12:40:50

+0

我會這樣做,但是首先使用已經使用{$ var}的模板系統從PHP生成html文件,因此我必須使用稍微不同的東西。謝謝你的建議,雖然 – 2012-04-02 12:42:12

0

我不是JS專家,但這在很多方面看起來都是錯誤的......你的數據對象應該是一個JS對象,就像{ title: 'Generic title.', description: 'It's a generic title' }

爲什麼不將值放入段落元素中,然後將它們插入到div中(即將它們附加到它們中)。事情是這樣的:

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

數據對象是一個JS對象,它通過AJAX從外部源加載,我希望這個功能可以很容易地集成到外部內容格式的任何conatainer。例如,我可以使用相同的JS函數加載數據並將其插入表格 – 2012-04-02 12:43:39

0

你可以做

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

http://jsfiddle.net/uZbk8/

+0

如果您使用的是捕獲組,則可以將其他參數傳遞給回調並避免內部替換 – fcalderan 2012-04-02 12:44:17

+0

@FabrizioCalderan是的,我看到(和upvoted)你的答案,它好多了! :) – 2012-04-02 12:46:31