javascript - 关于 replace() 代码的javascript,如何替换辅助"a"字符串?

  显示原文与译文双语对照的内容
94 1

kName ="cglsamaz";


cName = kName.replace("a","e");


document.getElementById("anythingx").innerHTML = cName;



这里代码结果:cglsemaz
我想要的:cglsamez

时间: 原作者:

76 0

我假设你想要一些通用的解决方案,不仅仅是最后的a,否则 正规表达式 Pattern 就可以做到。

例如可以使用 lastIndexOfsubstring的组合:


var kName ="cglsamaz";


var valueToReplace = 'a';


var newValue = 'e';


var replaceIndex = kName.lastIndexOf(valueToReplace);



var cName = 


 kName.substring(0, replaceIndex) +


 newValue +


 kName.substring(replaceIndex + valueToReplace.length);



document.getElementById("anythingx").innerHTML = cName;
<div id="anythingx"></div>
原作者:
94 2

下面是一个使用函数作为 .replace(...) 方法的第二个参数的通用解决方案:


 function replacerMaker(rplc, inst) {



//This is to keep track of the numbered instance found 


 var idx = 0;



//this returns a function which will replace the numbered instance of


//the search string with the replacement string


 return function(match, offset, string) {


 if (++idx === inst) {


 return rplc;


 }


 return match;


 }


 }



//A slightly longer name to test instances 3, 4, etc.


 var kName ="cglsamazabkdsakuodakdif";



 var cName = kName.replace(/a/g, replacerMaker("e", 2));


 document.getElementById("anythingx").innerHTML ="Second Instance:" + cName;



 cName = kName.replace(/a/g, replacerMaker("e", 4));


 document.getElementById("anythingx").innerHTML +="<br/>" +"Fourth Instance:" + cName;
<div id="anythingx"></div>
87 1

kName ="cglsamaz";


cName = kName.replace(/a(?=[^a]+$)/i,"e");


document.getElementById("anythingx").innerHTML = cName;



这将只替换任何字符串中的最后一个"a"。

  • 编辑( 最终答案):

kName ="cglsamaz";


cName = kName.split("").reverse().join("").replace(/a(?=[^a]{0,}a{1,1}[^a]{0,}$)/i,"e").split("").reverse().join("");


document.getElementById("anythingx").innerHTML = cName;



不幸的是,JavaScript不支持正面回溯。 这个代码将反转字符串,从末尾查找第二个"a"( 从原始字符串的第二个"a") 替换它。

这完全正确,并且对于任意数量的"a"字符,不区分大小写。 要使它与其他字符一起使用,可以动态修改 RegExp 。

120 0

你可以反转它,然后替换a 和e,然后再次反转。


kName ="cglsamaz";


kName = kName.split("").reverse().join("")


cName = kName.replace("a","e");


cName = cName.split("").reverse().join("")



然而,对于一个简单的改变来说,这似乎是相当长的曲折

...