उपरोक्त कार्यों में से कई (जूलियन जेफल्स को छोड़कर) में निम्नलिखित त्रुटि है:
js> '{0} {0} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 3.14 afoobc foo
या, तर्क सूची के अंत से पीछे की ओर गिनने वाले वेरिएंट के लिए:
js> '{0} {0} {1} {2}'.format(3.14, 'a{0}bc', 'foo');
3.14 3.14 a3.14bc foo
यहाँ एक सही कार्य है। यह जूलियन जेफ्स कोड का एक प्रोटोटाइप संस्करण है, जिसे मैंने थोड़ा सा तंग किया है:
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{(\d+)\}/g, function (m, n) { return args[n]; });
};
और यहाँ उसी का थोड़ा और अधिक उन्नत संस्करण है, जो आपको उन्हें दोगुना करके ब्रेसिज़ से बचने की अनुमति देता है:
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
if (m == "{{") { return "{"; }
if (m == "}}") { return "}"; }
return args[n];
});
};
यह सही ढंग से काम करता है:
js> '{0} {{0}} {{{0}}} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 {0} {3.14} a{2}bc foo
ब्लेयर मिचेलमोर द्वारा अच्छी अतिरिक्त सुविधाओं के एक समूह के साथ एक और अच्छा कार्यान्वयन यहां दिया गया है: https://web.archive.org/web/20120315214858/http://blairmitchelmore.com/javascript/string.format