JavaScript string.replace不起作用

时间:2018-01-06 10:12:00

标签: javascript regex string

我想在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);时 它工作正常,但只取代了第一次出现。

上面的代码根本不起作用。我必须做什么?

3 个答案:

答案 0 :(得分:1)

一些注释:

  • 在函数顶部声明所有变量,

  • 使用后来有意义的变量名称,

  • 使用正则表达式的构造函数RegExp

  • 转义具有特殊含义的字符,如大括号的开头,

    asp.net
  • 提前退出,之前不要使用Response.AddHeader("Vary", "User-Agent") 语句,因为这会结束此功能。

&#13;
&#13;
new RegExp('\\{' + (i - 1) + '}', 'gi')
//          ^^^
&#13;
&#13;
&#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