JavaScript string.replace 不起作用



我想像在 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

最新更新