Заменить все между двумя строками числами i ++ {0}, {1}

0

Есть механизм, который заменяет строки, такие как.NET string.Format в javascript ("{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:{ then } затем повторяя его, я уверен, что у кого-то уже есть лучшее решение.

  • 0
    @RoryMcCrossan wtf? Это имеет столько же общего, как форматирование слов.
  • 0
    Я не уверен, что там произошло? Я не знал, почему тема закрыта, потому что у меня нет полномочий модов ... насколько я знаю. Я снова открыл.
Показать ещё 4 комментария
Теги:
formatting

1 ответ

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:', '\\[', '\\]');
  • 0
    Спасибо, это именно то, что я искал.
  • 0
    @LIUFA Это не совсем правильно. Я разместил лучшее решение.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню