Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用javascript中的实际值替换.NET字符串占位符?_Javascript_Regex - Fatal编程技术网

如何用javascript中的实际值替换.NET字符串占位符?

如何用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}”

我有一个字符串(来自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}”,则会失败:

函数格式字符串(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;
}