JavaScript 等价于 printf/String.Format

新手上路,请多包涵

我正在寻找与 C/PHP printf() 或 C#/Java 程序员相当的 JavaScript 等价物 String.Format() (用于 .NET 的 IFormatProvider )。

我现在的基本要求是数字的千位分隔符格式,但是处理大量组合(包括日期)的东西会很好。

我意识到 Microsoft 的 Ajax 库提供了 String.Format() 的一个版本,但我们不想要该框架的全部开销。

原文由 Chris S 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 871
2 个回答

当前的 JavaScript

从 ES6 开始,您可以使用模板字符串:

 let soMany = 10;
 console.log(`This is ${soMany} times easier!`);
 // "This is 10 times easier!

有关详细信息,请参阅下面的 Kim 的 回答


较旧的答案

为 JavaScript 尝试 sprintf()


如果你真的想自己做一个简单的格式化方法,不要连续做替换,而是同时做。

因为当先前替换的替换字符串也包含如下格式序列时,提到的大多数其他建议都会失败:

 "{0}{1}".format("{1}", "{0}")

通常您希望输出为 {1}{0} 但实际输出为 {1}{1} 。所以像 恐惧噬菌体的建议 那样做一个同时替换。

原文由 Gumbo 发布,翻译遵循 CC BY-SA 4.0 许可协议

基于之前建议的解决方案:

 // First, checks if it isn't implemented yet.
if (!String.prototype.format) {
  String.prototype.format = function() {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function(match, number) {
      return typeof args[number] != 'undefined'
        ? args[number]
        : match
      ;
    });
  };
}

"{0} is dead, but {1} is alive! {0} {2}".format("ASP", "ASP.NET")

产出

ASP 已死,但 ASP.NET 还活着!售价 {2}


如果您不想修改 String 的原型:

 if (!String.format) {
  String.format = function(format) {
    var args = Array.prototype.slice.call(arguments, 1);
    return format.replace(/{(\d+)}/g, function(match, number) {
      return typeof args[number] != 'undefined'
        ? args[number]
        : match
      ;
    });
  };
}

给你更熟悉的:

String.format('{0} is dead, but {1} is alive! {0} {2}', 'ASP', 'ASP.NET');

结果相同:

ASP 已死,但 ASP.NET 还活着!售价 {2}

原文由 fearphage 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题