在没有数字占位符的JavaScript中复制C#的string.format()

时间:2014-04-02 09:48:18

标签: javascript jquery node.js angularjs

C#的String.Format方法允许您保持"用指定对象的字符串表示替换指定字符串中的一个或多个格式项。"

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中使用类似的功能,看起来像这样。

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个参数(或创建N个占位符)的数字占位符相比。

我正在寻找使用JavaScript或任何基于JavaScript的库的解决方案。

1 个答案:

答案 0 :(得分:3)

我不确定你到底在找什么。也许是这样的?

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;
}