2015-01-23 6 views
0

У меня есть массив строк, в каждой строке я хочу вызвать переменнуюзаменить значение строки с переменной

Strings = ["$username thanks for visiting","Thanks $username, but I don't understand the command $userProvidedCommand"] 

теперь я знаю, что могу использовать строку заменить

msg.replace('$username', userame) 

однако я не» t хочу написать замену строки для каждой возможности.

какой был идеально, думаю. было бы иметь какую-то замену шаблонов, где он ищет $ и разбивает строку и объединяет ее вместе с переменной.

Есть ли способ сделать это, или, может быть, есть лучшее решение?

благодарит

+0

К сожалению только собираюсь дамп ссылка http://www.diveintojavascript.com/projects/javascript-sprintf – Tom

+0

вы не могли бы обеспечить ключ для каждой строки? затем заменить ключом? Переверните массивы и замените каждый ключ – charlietfl

ответ

3

Вы можете сделать это с регулярными выражениями:

var data = { 
    username: 'peterpan', 
    userProvidedCommand: 'mycommand' 
} 

var format = function(data, str) { 
    return str.replace(/\$(\w+)/g, function(_, m) { 
    return data[m] || '' 
    }) 
} 

var result = strings.map(format.bind(null, data)) 
+0

Я думаю, что это приведет меня туда, куда я иду, спасибо за быстрый ответ – mcgrailm

+0

быстрый вопрос, что если у меня нет всех переменных в хорошем опрятном объекте – mcgrailm

+1

@mcgrailm, я бы просто поместите их в объект, в ES6 есть даже ярлык для этого '{a: a, b: b, c: c} === {a, b, c}' – elclanrs