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

  显示原文与译文双语对照的内容
94 1
kName ="cglsamaz";
cName = kName.replace("a","e");
document.getElementById("anythingx").innerHTML = cName;

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

时间:原作者:0个回答

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("")

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

原作者:
...