用数字i ++ {0},{1}替换两个字符串之间的所有内容

时间:2014-05-13 09:30:22

标签: javascript jquery formatting

在javascript string.Format中替换像.NET ("{0} - {1}",'a','b')这样的字符串的机制会导致"a - b"

我正在寻找能够用{0} {1} ...

替换两个字符串之间的所有内容的机制

示例:

var str = "([OrderDate] >= Func:{TheApplication().GetProfileAttr('TestDate')} ) and [OrderDate] < 1/1/2013 AND [Name] = Func:{TheApplication().GetProfileAttr('Name')}"
stringFormatProducer(str,"Func:{","}");

会给出结果

"([OrderDate] >= {0} ) and [OrderDate] < 1/1/2013 AND [Name] = {1}"

我以可怕的方式完成了这个机制,我在Func:{然后}将其拆分,然后迭代它,我确信有人已经有了更好的解决方案。

1 个答案:

答案 0 :(得分:2)

var i = 0;

str.replace(/Func:{[^}]+}/g, function(c) {
    return '{' + i++ + '}';
});

或者更灵活的方式:

var i = 0,
    func = 'Func:';

str.replace(new RegExp(func + '{[^}]+}', 'g'), function(c) {
    return '{' + i++ + '}';
});

完整的方法:

String.prototype.createFormattingString = function(prefix, open, close) {
    var re = new RegExp(prefix + open + '[^' + close + ']+' + close, 'g'),
        i = 0;

    return this.replace(re, function(c) {
        return '{' + i++ + '}';
    });
};

'(VAR > Func:{ some text })'.createFormattingString('Func:', '{', '}');
'(VAR > Func:[ some text ])'.createFormattingString('Func:', '\\[', '\\]');