快速Javascript字符串替换

Dav*_*och 3 javascript regex replace autocomplete

嘿有SO的天才!

这是一个自动完成插件,需要接受数据作为数组数组并使用格式字符串(或正则表达式)进行转换.格式字符串可以是任何格式.

var dataArray = [ ["data1-1", "data1-2", "data1-3"], ["data2-1", "data2-2", "data2-3"],... ];
var format = "<li>{0} <br /> -- <small> {1}, {2}</small></li>";
// alternate formats could be: 
//  "<li>{0}</li>"
//  "<a href="{0}" title="{2}">{1} ({2})</a>"
// etc...

function fillAutocomplete(datum,format){
    // do some magic here...
    // return "<li>data1-1 <br /> -- <small> data1-2, data1-3</small></li>";
}
Run Code Online (Sandbox Code Playgroud)

以下想法有效..但我想看看是否会更快......

var datum = data[0],
    html="<li>\{0\} <br /> -- <small> \{1\}, \{2\}</small></li>";
for(var i=0,l=datum.length;i<l;++i){
    var reg = new RegExp("\\{"+i+"\\}");
    html=html.replace(reg,datum[i]);
}
Run Code Online (Sandbox Code Playgroud)

我对如何处理这个问题的新想法持开放态度.

Jas*_*att 11

查看John Resig的"搜索并不替换",看看您是否可以将回调函数传递给myString.replace(..).

var datum = data[0];
var html="<li>{0}<br /> -- <small>{1}, {2}</small></li>";
var pattern = /\{(\d+)\}/g;

html = html.replace(pattern,function(match, key, value){
    return datum[key];
});
Run Code Online (Sandbox Code Playgroud)