node.js是否有sprintf等效项


Answers:


72

中现在有printf类似的支持util.format()

例:

util.format('hello %s', 'world');
// Returns: 'hello world'

70
另外,in的支持util.format非常基础:否%5d%5.3f类似的东西,因此sprintf不幸的是,它不是真正的解决方案。
lapo 2012年

3
与@Elliot Foster的评论类似,您也可以这样做var printf = require('util').format
伊恩·奥克斯利

1
@lapo浮点数可以使用圆形的toFixed() var a = 1.234567;a.toFixed(3)=>>'1.235'
艾蒂安

4
这是没用的,它不是类printf可言
帕维尔·P

2
将数字强制转换为固定宽度的字符串表示形式(可能使用0填充)是printf-alike的主要用例。从10.5.0版开始util.format不支持该功能(例如require('util').format("blarf_%04d", 42);)。
collapsar

27

npm注册表中有几个是实际的sprintf实现,因为它们util.format只有非常基本的支持。


不幸的是sprintf-js与颜色不兼容:sprintf(" %s %s", title.grey, colors['blue'](msg)) ' \x1B[90mTitle\x1B[39m \x1B[34mMessage\x1B[39m'
清道夫


5

console.log 工作良好。

console.log('%d hours', 4); // 4 hours
console.log('The %2$s contains %1$d monkeys', 4, 'tree'); // The tree contains 4 monkeys

4
第一个示例在Node 0.10.18上运行,但是第二个完全失败:需要删除2 $ / 1 $才能真正获得参数插值,然后参数的顺序必须正确,否则得到:console.log ('%s包含%d猴子',4,'tree'); 返回:4个包含NaN猴子```
FGM 2013年

第二个示例可在Chrome的(v33)控制台中使用。根据@FGM,console.log('The %s contains %d monkeys', 'tree', 4);在节点v0.10.26中工作。
joemaller 2014年

2
有用的提示(如果可行),但等效于printf,而不是sprintf
Alnitak

1
不确定为什么在节点v9.4上不起作用,只需使用`es6 template ${format}`
Ray Foss,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.