我想在c#中编写JavaScript函数strinformat。
function gg_stringformat(){
argcount=arguments.length;
if (argcount==0) {
return "";
}
else if (argcount==1){
return arguments[0];
}
else {
original =arguments[0];
for (var i=1; i<argcount;i++) {
strtoreplace='{'+(i-1)+'}';
strreplacewith=arguments[i];
original=original.replace('/%' + strtoreplace + '%/gi',strreplacewith);
}//for
return original;
}
}
当我使用original=original.replace( strtoreplace , strreplacewith);
时
它工作正常,但只取代了第一次出现。
上面的代码根本不起作用。我必须做什么?
答案 0 :(得分:1)
一些注释:
在函数顶部声明所有变量,
使用后来有意义的变量名称,
使用正则表达式的构造函数RegExp
转义具有特殊含义的字符,如大括号的开头,
asp.net
提前退出,之前不要使用Response.AddHeader("Vary", "User-Agent")
语句,因为这会结束此功能。
new RegExp('\\{' + (i - 1) + '}', 'gi')
// ^^^
&#13;
答案 1 :(得分:1)
万一你用RegExp不行,你可以写这样的东西 -
String.prototype.replaceAll = function(oldOne, newOne) {
return $(this).split(oldOne).join(newOne);
};
这将为String原型添加一个方法,然后你写一个 -
original=original.replaceAll(strtoreplace , strreplacewith);
它将替换字符串的每个出现。
答案 2 :(得分:0)
您应该尝试使用构造函数创建RegExp。语法是:
/图案/标记
新的RegExp(模式[,标志])
RegExp(pattern [,flags])
function gg_stringformat(){
argcount=arguments.length;
if (argcount==0) {
return "";
}
else if (argcount==1){
return arguments[0];
}
else {
original =arguments[0];
for (var i=1; i<argcount;i++) {
strtoreplace='{'+(i-1)+'}';
strreplacewith=arguments[i];
original=original.replace(new RegExp('%' + strtoreplace + '%', 'gi') ,strreplacewith);
}//for
return original;
}
}
您可以在此处找到更多信息
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp