关于replace()代码,我该如何替换第二个“ a”字符串?

时间:2019-01-21 23:31:48

标签: javascript html

kName = "cglsamaz";
cName = kName.replace("a","e");
document.getElementById("anythingx").innerHTML = cName;

此代码结果:cglsemaz
我想要的是:cglsamez

5 个答案:

答案 0 :(得分:1)

我假设您想要一点通用的解决方案,而不仅仅是字面意义上的a,否则Regex模式就可以做到。

为此,可以结合使用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>

答案 1 :(得分:1)

这是一个广义的解决方案,它使用函数作为.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>

答案 2 :(得分:1)

我以前的答案有一个聪明的选择:

kName = "cglsamaz";
cName = kName.replace("a","*TEMP*");
cName = cName.replace("a","e");
cName = cName.replace("*TEMP*","a");
document.getElementById("anythingx").innerHTML = cName;

将第一个匹配项替换为临时值,允许根据需要替换第二个匹配项(现在是第一个匹配项),然后将原始值恢复为临时值!可以简化为单个字符串。

(我创建了一个新答案,因为它是完全不同的方法)

答案 3 :(得分:0)

您可以将其反转,然后将a替换为和e,然后再次反转。

kName = "cglsamaz";
kName = kName.split("").reverse().join("")
cName = kName.replace("a","e");
cName  = cName.split("").reverse().join("")

然而,对于一个简单的更改来说,这似乎已经很长时间 希望有帮助

答案 4 :(得分:0)

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不支持Positive LookBehind。此代码将反转字符串,从末尾查找第二个“ a”(即原始字符串开头的第二个“ a”),将其替换然后再次反转。

这完全符合要求,并且可以用于任意数量的不区分大小写的“ a”字符。为了使其也可以与其他字符一起使用,可以对RegExp进行动态修改。