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