如何用javascript中的实际值替换.NET字符串占位符?
我有一个字符串(来自ASP.NET),其中包含一个或多个占位符。在.NET中,我使用string.Format()方法将占位符替换为实际值:如何用javascript中的实际值替换.NET字符串占位符?,javascript,regex,Javascript,Regex,我有一个字符串(来自ASP.NET),其中包含一个或多个占位符。在.NET中,我使用string.Format()方法将占位符替换为实际值: var str = "aaa {0} bbb {1} ccc {2:0.0}"; var result = string.Format(str, new [] {1, 2, 33.123}); 现在我必须在javascript中做同样的事情,但我正在努力使用正则表达式。以下函数适用于简单的占位符,如“{0}”,但适用于更复杂的占位符,如“{3:0.0}”
var str = "aaa {0} bbb {1} ccc {2:0.0}";
var result = string.Format(str, new [] {1, 2, 33.123});
现在我必须在javascript中做同样的事情,但我正在努力使用正则表达式。以下函数适用于简单的占位符,如“{0}”,但适用于更复杂的占位符,如“{3:0.0}”,则会失败:
函数格式字符串(txt,args){
对于(i=0;i
对于复杂的占位符,我试图修改我的函数以使用正则表达式,但到目前为止,我没有找到一个有效的RegExp。这就是我所尝试的:
function FormatString2(txt, args) {
for (i = 0; i < args.length; i++) {
txt = txt.replace(new RegExp('{' + i + '.*}'), args[i]);
}
return txt;
}
// does not work correctly, i.e:
FormatString2("aa {0:0.0} bb {1} cc", [1, 2]);
// returns "aa 1 cc" instead of "aa 1 bb 2 cc"
函数FormatString2(txt,args){
对于(i=0;i
有没有关于如何在javascript中正确替换这些.NET占位符的提示(是否使用RegExp)?好的,在进行了更多的谷歌搜索后,我想我找到了一个似乎有效的解决方案:
function FormatString2(txt, args) {
for (i = 0; i < args.length; i++) {
txt = txt.replace(new RegExp('{' + i + '[^}]*}'), args[i]);
}
return txt;
}
函数FormatString2(txt,args){
对于(i=0;i在JavaScript中有许多的实现——但是如果您喜欢这种语法,那么您将需要这样的东西(未经测试):
//在任何函数调用之外定义不变的值:
var格式化程序=/{(\d+)([^}]*)}/g;
//如果冒号是标记字符,则需要:
///{(\d+):?([^}]*)}/g
var模式=功能(模式){
开关(模式){
案例“0.0”:
返回函数(str){/*对此处的字符串进行处理*/};
//其他案件都在这里。
违约:
返回函数(str){returnstr;};
}
};
函数替换器(键,模式){
返回模式(模式)(参数[键])
}
函数FormatString(txt,args){
var l=args.length,i=1;
而(i
您还可以使用对象文字而不是函数,并在replacer
中执行标记检查,以在0.0
等标记和键(如十进制数
)之间进行转换。这完全取决于您需要的解决方案的健壮性。您有没有办法将已格式化的字符串传递回去?@hunter:没有。否则我就不会使用javascript和regexp:-)
function FormatString2(txt, args) {
for (i = 0; i < args.length; i++) {
txt = txt.replace(new RegExp('{' + i + '[^}]*}'), args[i]);
}
return txt;
}
// Define unchanging values outside of any function call:
var formatter = /{(\d+)([^}]*)}/g;
// If the colon is the flagging character, then you'll want:
// /{(\d+):?([^}]*)}/g
var modes = function(mode) {
switch (mode) {
case "0.0":
return function(str) { /* do something with the string here */ };
// Additional cases go here.
default:
return function(str) { return str; };
}
};
function replacer(key, mode) {
return modes(mode)(args[key])
}
function FormatString(txt, args) {
var l = args.length, i = 1;
while (i < l) {
txt = txt.replace(formatter, replacer);
}
return txt;
}