JavaScript-эквивалент функции format () Python?

У Python есть эта красивая функция, чтобы включить это:

bar1 = 'foobar' bar2 = 'jumped' bar3 = 'dog' foo = 'The lazy ' + bar3 + ' ' + bar2 ' over the ' + bar1 # The lazy dog jumped over the foobar 

В этом:

 bar1 = 'foobar' bar2 = 'jumped' bar3 = 'dog' foo = 'The lazy {} {} over the {}'.format(bar3, bar2, bar1) # The lazy dog jumped over the foobar 

Есть ли такая функция JavaScript? Если нет, как мне создать тот, который следует за тем же синтаксисом, что и реализация Python?

10 Solutions collect form web for “JavaScript-эквивалент функции format () Python?”

Другой подход, используя метод String.prototype.replace , с функцией «replacer» в качестве второго аргумента:

 String.prototype.format = function () { var i = 0, args = arguments; return this.replace(/{}/g, function () { return typeof args[i] != 'undefined' ? args[i++] : ''; }); }; var bar1 = 'foobar', bar2 = 'jumped', bar3 = 'dog'; 'The lazy {} {} over the {}'.format(bar3, bar2, bar1); // "The lazy dog jumped over the foobar" 

Ищете ответ на тот же вопрос, я только что нашел это: https://github.com/davidchambers/string-format , который является «форматированием строки JavaScript, созданным на основе Python str.format() ». Кажется, он почти такой же, как функция format() python.

Взято из библиотеки YAHOOs:

 YAHOO.Tools.printf = function() { var num = arguments.length; var oStr = arguments[0]; for (var i = 1; i < num; i++) { var pattern = "\\{" + (i-1) + "\\}"; var re = new RegExp(pattern, "g"); oStr = oStr.replace(re, arguments[i]); } return oStr; } 

Назовите это так:

 bar1 = 'foobar' bar2 = 'jumped' bar3 = 'dog' foo = YAHOO.Tools.printf('The lazy {0} {1} over the {2}', bar3, bar2, bar1); 

Существует способ, но не совсем используемый формат.

 var name = "John"; var age = 19; var message = `My name is ${name} and I am ${age} years old`; console.log(message); 

Вот моя первая попытка. Не стесняйтесь указывать на недостатки.

Пример: http://jsfiddle.net/wFb2p/5/

 String.prototype.format = function() { var str = this; var i = 0; var len = arguments.length; var matches = str.match(/{}/g); if( !matches || matches.length !== len ) { throw "wrong number of arguments"; } while( i < len ) { str = str.replace(/{}/, arguments[i] ); i++; } return str; }; 

EDIT: сделало его более эффективным, исключив .match() в инструкции while .

EDIT: изменили его так, чтобы эта же ошибка выдавалась, если вы не передали никаких аргументов.

Этот код позволяет точно указать, какие скобки заменить на какие строки. Скобки не должны быть в том же порядке, что и аргументы, и возможны несколько скобок. Функция формата принимает в качестве параметра массив значений, каждый из которых является одной из скобок «переменных», заменяемой соответствующим значением.

 String.prototype.format = function (arguments) { var this_string = ''; for (var char_pos = 0; char_pos < this.length; char_pos++) { this_string = this_string + this[char_pos]; } for (var key in arguments) { var string_key = '{' + key + '}' this_string = this_string.replace(new RegExp(string_key, 'g'), arguments[key]); } return this_string; }; 'The time is {time} and today is {day}, {day}, {day}. Oh, and did I mention that the time is {time}.'.format({day:'Monday',time:'2:13'}); //'The time is 2:13 and today is Monday, Monday, Monday. Oh, and did I mention that the time is 2:13.' 

JavaScript не имеет такой функции AFAIK.

Вы можете создать его, изменив объект прототипа класса String, чтобы добавить метод format (), который принимает переменное количество аргументов.

В методе формата вам нужно будет получить значение экземпляра String (фактическая строка), а затем проанализировать его для «{}» и вставить соответствующий аргумент.

Затем верните новую строку вызывающему.

JavaScript по умолчанию не имеет функции форматирования строк, хотя вы можете создать свой собственный или использовать кого-то другого (например, sprintf )

JS:

 String.prototype.format = function () { var str = this; for (var i = 0; i < arguments.length; i++) { str = str.replace('{' + i + '}', arguments[i]); } return str; } bar1 = 'foobar'; bar2 = 'jumped'; bar3 = 'dog'; python_format = 'The lazy {2} {1} over the {0}'.format(bar1,bar2,bar3); document.getElementById("demo").innerHTML = "JavaScript equivalent of Python's format() function:<br><span id='python_str'>" + python_format + "</span>"; 

HTML:

 <p id="demo"></p> 

CSS:

 span#python_str { color: red; font-style: italic; } 

ВЫВОД:

JavaScript-эквивалент функции format () Python:

Ленькая собака перепрыгнула через foobar

DEMO:

jsFiddle

В файле

https://github.com/BruceSherwood/glowscript/blob/master/lib/glow/api_misc.js

является функцией String.prototype.format = function (args), которая полностью реализует функцию Python string.format (), не ограничиваясь просто обработкой символьных строк.

  • Как реагировать на XMLHttpRequest
  • Как я могу передавать данные из Flask в JavaScript в шаблоне?
  • Почему конфликтующие переменные?
  • отправка формы django с использованием javascript
  • Недопустимая ошибка области при попытке доступа к gmail api
  • как получить следующий obj в цикле модель django
  • В Javascript понимается словарь или объект `map`
  • Не удается установить безопасное соединение с Websocket в Firefox.
  • Python - лучший язык программирования в мире.