И реализация:

от вопрос уже есть ответ здесь:

Как я могу сделать интерполяцию строк в JavaScript? 17 ответов

я устал писать это:

string_needed = "префикс ....." + тема + "суффикс ...." + имя + "тестирование";

я бы подумал, что кто-то уже мог что-то сделать с этим;)

 deceze♦20 янв. 2011 г., 04:24
Лучше сделайте ярлык для него, тогда этот синтаксис никуда не денется. ;) Лучшее, что вы могли бы сделать, это что-то вродеsprintf функция, но это не сделает вещи короче.
 Ajedi3205 февр. 2015 г., 16:52
В ECMAscript 6 есть строки шаблонов ... так что да, в будущем вы сможете делать `string text $ {expression} string text`:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
 Phrogz20 янв. 2011 г., 05:56
Смотрите самый лучший ответ в дубликате вопроса.

Ответы на вопрос(5)

вы можете реализовать что-то, что в основном выполняет Ruby-подобную интерполяцию:

sub = function(str) {
  return str.replace(/#\{(.*?)\}/g,
    function(whole, expr) {
      return eval(expr)
    })
}

js> y = "world!"
world!
js> sub("Hello #{y}")
Hello world!
js> sub("1 + 1 = #{1 + 1}")
1 + 1 = 2

Использование его на чем угодно, кроме строковых литералов, вызывает проблемыи это, вероятно, довольно медленно в любом случае (хотя я не измерял). Просто подумал, что дам тебе знать.

Единственный способ - реализовать это самостоятельно или использовать стороннюю библиотеку, которая сделает это за вас.

РЕДАКТИРОВАТЬ

Как добавил в комментариях Маркос, есть предложение для ECMAScript 6 (Harmony), поэтому мы можем иметь правильную интерполяцию строк:

var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."

Пожалуйста, смотрите больше информацииВот.

 Paulo Fidalgo05 февр. 2015 г., 16:45
@ Маркос Спасибо, что указал на это.
 Marcos05 февр. 2015 г., 16:36
Это изменилось. Теперь есть лучший способ:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/... Внедрение в 2015 году JS того, что уже понравилось во многих языках, таких как Ruby и PHP. Ни этот вопрос, ни его ТАК "дубликат" не дают новых ответов .... так грустно.

чтобы сделать это. Использование заключается в следующем:

interpolate("#{gimme}, #{shelter}", {gimme:'hello', shelter:'world'})
// returns "hello, world"

И реализация:

interpolate = function(formatString, data) {
    var i, len,
        formatChar,
        prevFormatChar,
        prevPrevFormatChar;
    var prop, startIndex = -1, endIndex = -1,
        finalString = '';
    for (i = 0, len = formatString.length; i<len; ++i) {
        formatChar = formatString[i];
        prevFormatChar = i===0 ? '\0' : formatString[i-1],
        prevPrevFormatChar =  i<2 ? '\0' : formatString[i-2];

        if (formatChar === '{' && prevFormatChar === '#' && prevPrevFormatChar !== '\\' ) {
            startIndex = i;
        } else if (formatChar === '}' && prevFormatChar !== '\\' && startIndex !== -1) {
            endIndex = i;
            finalString += data[formatString.substring(startIndex+1, endIndex)];
            startIndex = -1;
            endIndex = -1;
        } else if (startIndex === -1 && startIndex === -1){
            if ( (formatChar !== '\\' && formatChar !== '#') || ( (formatChar === '\\' || formatChar === '#') && prevFormatChar === '\\') ) {
                finalString += formatChar;
            }
        }
    }
    return finalString;
};

CoffeeScript написать код (который имеет интерполяцию как Ruby т.е. # {foo}).

Он «компилируется» в javascript - так что в итоге вы получите javascript, похожий на то, что вы написали, но без необходимости писать / поддерживать код +++, который вам надоел

Я понимаю, что просьба рассмотреть другой язык на грани того, чтобы быть правильным ответом или нет, но учитывая то, как работает coffeescript, и что одним из ваших тегов является Ruby, я надеюсь, что он пройдет.

Решение Вопроса

Мне нравится использовать Array.join:

["prefix ....", topic, "suffix....", name, "testing"].join("")

или использоватьString.concat

String.concat("a", 2, "c")

или вы можете написать свою собственную функцию сцепления:

var concat = function(/* args */) {
    /*
     * Something involving a loop through arguments
     */
}

или использовать стороннююsprintf функция, такая какhttp://www.diveintojavascript.com/projects/javascript-sprintf

 Couto20 янв. 2011 г., 05:09
@ Reid, я могу предложить это?blogs.sitepoint.com/2010/09/14/... ;)
 Jared Beck24 июл. 2013 г., 18:15
 katsuya26 февр. 2013 г., 08:22
Также одна из проблем с подходом к соединению с массивом состоит в том, что его трудно перевести, если вы заботитесь о i18n. Гораздо проще перевести строку, например: «Я играл% s с% i people». чем «я играл», «с» и «людьми».
 Jimmy Cuadra20 янв. 2011 г., 07:00
Просто собирался сказать ... Несмотря на то, что эта техника привлекла большое внимание, Array # joinне быстрее, чем конкатенация строк во многих случаях.
 Reid20 янв. 2011 г., 04:29
+1 для Array.join. Самый быстрый способ сделать это, который вы найдете (это также намного быстрее, чем конкатенация необработанных строк).

Ваш ответ на вопрос