在JavaScript中不使用数字占位符复制C#的string.format()

C#的String.Format方法允许您保留“用指定对象的string表示replace指定string中的一个或多个格式项”。

string text = "select {0},{1},{2} from {3} where {4};" var result = String.Format(text, "col1","col2","col3","table","col1 > 10"); 

之后这个结果看起来像

 select col1,col2, col3 from table where col1 > 10; 

我也在利用类似于JavaScript的function,看起来像这样。

 this.FormatString = function() { var s = arguments[0]; for (var i = 0; i < arguments.length - 1; i++) { var reg = new RegExp("\\{" + i + "\\}", "gm"); s = s.replace(reg, arguments[i + 1]); } return s; }; 

我的问题是有什么办法使用逻辑名作为占位符,而不是使用数字占位符的答复。

所以,而不是使用

 string text = "select {0},{1},{2} from {3} where {4};" 

我想用

 string text = "select {Column List} from {TableName} where {Where Clause};" 

我知道使用逻辑名称作为占位符不是通用的,相比之下,数字占位符允许用户传递N个参数(或创buildN个占位符)。

我正在通过使用JavaScript或任何基于JavaScript的库寻找解决scheme。

       

网上收集的解决方案 "在JavaScript中不使用数字占位符复制C#的string.format()"

我不确定你在找什么。 也许这样?

 var text = 'select {ColumnList} from {TableName} where {WhereClause}'; var values = { ColumnList: 'col1, col2, col3', TableName: 'table', WhereClause: 'col1 > 10' }; var formatted = formatString(text, values); // formatted now contains 'select col1, col2, col3 from table where col1 > 10' function formatString (src, obj) { for (var key in obj) { if (obj.hasOwnProperty(key)) { var rx = new RegExp('\\{' + key + '\\}', 'gm'); src = src.replace(rx, obj[key]); } } return src; }