簡體   English   中英

JavaScript string.replace不起作用

[英]JavaScript string.replace doesn't works

我想像在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') // ^^^ 
  • 提早退出,請勿在之前使用return語句, else將使用else ,因為這會終止函數。

 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)); 

萬一您對RegExp不滿意,可以編寫類似以下內容的代碼-

String.prototype.replaceAll = function(oldOne, newOne) {
        return $(this).split(oldOne).join(newOne);
    };

這將為String原型添加一個方法,然后您將

original=original.replaceAll(strtoreplace , strreplacewith);

它將替換字符串的每次出現。

您應該嘗試使用構造函數創建RegExp。 語法是:

/模式/標志
新的RegExp(pattern [,flags])
RegExp(pattern [,標志])

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM