我想像在 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);
它工作正常,但仅替换第一次出现。
使用上面的代码,它根本不起作用。 我必须做什么?
一些注释:
-
在函数顶部声明所有变量,
-
使用稍后有意义的变量名称,
-
获取正则表达式的构造函数,
RegExp
-
转义具有特殊含义的字符,如大括号的开头,
new RegExp('\{' + (i - 1) + '}', 'gi') // ^^^
-
提前退出,不要使用
else
之前使用return
语句,因为这会结束函数。
function gg_stringformat() {
var argcount = arguments.length,
string,
i;
if (!argcount) {
return "";
}
if (argcount === 1) {
return arguments[0];
}
string = arguments[0];
for (i = 1; i < argcount; i++) {
string = string.replace(new RegExp('\{' + (i - 1) + '}', 'gi'), arguments[i]);
}
return string;
}
console.log(gg_stringformat("My name is {0}, My age is {1}", "George Gogiava", 35));
以防万一你对正则表达式不满意,你可以写这样的东西-
String.prototype.replaceAll = function(oldOne, newOne) {
return $(this).split(oldOne).join(newOne);
};
这将向字符串原型添加一个方法,然后你写-
original=original.replaceAll(strtoreplace , strreplacewith);
它将替换字符串的每次出现。
你应该尝试使用构造函数创建正则表达式。语法为:
/模式/标志
new RegExp(pattern[, flags](
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