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

Posted

技术标签:

【中文标题】在没有数字占位符的 JavaScript 中复制 C# 的 string.format()【英文标题】:Replicating string.format() of C# in JavaScript without numeric placeholders 【发布时间】: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 的库的解决方案。

【问题讨论】:

仅供参考:ECMAScript 6 已内置模板字符串:tc39wiki.calculist.org/es6/template-strings。如果你在 JavaScript 之上使用 TypeScript,你已经可以使用这个功能了。 【参考方案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;

【讨论】:

以上是关于在没有数字占位符的 JavaScript 中复制 C# 的 string.format()的主要内容,如果未能解决你的问题,请参考以下文章

有没有我可以使用的 js 函数来使占位符属性在 IE 中工作? [复制]

更改占位符的 css 属性

如何在 React Native 中更改 TextInput 占位符的样式?

Lua中string.format占位符的使用

8.占个位符的使用

使用带占位符的 LIKE 准备语句 [重复]