Last Updated: March 21, 2023
·
233.1K
· avsej

Simple String.format() in javascript

String.prototype.format = function() {
  a = this;
  for (k in arguments) {
    a = a.replace("{" + k + "}", arguments[k])
  }
  return a
}

Usage:

console.log("Hello, {0}!".format("World"))

4 Responses
Add your response

Thanks! I made a small improvement so that all instances are replaced rather than just the first. :)

String.prototype.format = function () {
        var a = this;
        for (var k in arguments) {
            a = a.replace(new RegExp("\\{" + k + "\\}", 'g'), arguments[k]);
        }
        return a
    }
over 1 year ago ·

This doesn't change the problem of backward compatibility, but string literals are coming to JS:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

You might wish to amend your prototyping to match the functionality.

One thing to note is that it uses the ` string limiter rather than the single or double quotes ' "

over 1 year ago ·

Simple is nice, but it has its drawbacks.

console.log("{0} {1}".format("{1}", 42)) //oddly, prints "42 42"
//not sure how I would print "{0}" within the string without escaping...

Here's an implementation that validates the format string and allows escaping. I also prefer a free function over extending builtin types.

function format(fmt, ...args) {
    if (!fmt.match(/^(?:(?:(?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{[0-9]+\}))+$/)) {
        throw new Error('invalid format string.');
    }
    return fmt.replace(/((?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{([0-9]+)\})/g, (m, str, index) => {
        if (str) {
            return str.replace(/(?:{{)|(?:}})/g, m => m[0]);
        } else {
            if (index >= args.length) {
                throw new Error('argument index is out of range in format');
            }
            return args[index];
        }
    });
}

function print(fmt, ...args) {
    console.log(format(fmt, ...args));
}

print("Hello, {0}! The answer is {1}.", "World", 42);
print("{0} {1}", "{1}", 42);
print("{{0}} will be replaced with {0}", 42);
print("{0}} woops, throw!")
over 1 year ago ·

Thanks, your post really helped me!

over 1 year ago ·
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy