【问题标题】:Replicating string.format() of C# in JavaScript without numeric placeholders在没有数字占位符的 JavaScript 中复制 C# 的 string.format()
【发布时间】:2014-05-13 12:12:17
【问题描述】:

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 的库的解决方案。

【问题讨论】:

标签: javascript jquery node.js angularjs


【解决方案1】:

我不确定您在寻找什么。也许是这样的?

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

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多