[英]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.