【问题标题】:JavaScript How can I replace a char from a String with 2 new charsJavaScript如何用2个新字符替换字符串中的字符
【发布时间】:2020-06-16 08:12:51
【问题描述】:

例如,我有字符串“Hello my name is ...”,现在我想将字符串更改为“Hellel my name is ...”。我该怎么做?我已经写了一个代码,但是每当我想用 2 个新字符更改/替换 1 个字符时,整个“网站”就会永远加载。

这是我的代码:

function f(str) {
        let e = document.getElementById("changeValue");
        let replaceStr = e.options[e.selectedIndex].text;
        const vokale = ['a', 'e',  'i', 'o', 'u'];
        for (let i = 0; i < str.length;i++) {
            if (vokale.includes(str.toLowerCase()[i])){
                if(vokale.includes(str.toLowerCase()[i+1])){
                    str = str.substr(0, i + 1) + '' + str.substr(i + 2, str.length);
                }
                if (replaceStr.length == 2) {
                    str = str.substr(0, i) + replaceStr.charAt(0) + str.substr(i + 1, str.length);
                    str = str.substr(0, i + 1) + replaceStr.charAt(1) + str.substr(i + 2, str.length);
                } else {
                    str = str.substr(0, i) + replaceStr + str.substr(i + 1, str.length);
                }
            }
        }
        changeText(str);
    }

str ... 是我要修改的字符串 - e ... 只是一个字符串/字符,我想替换一些东西,就像这里我想用 e 替换所有人声。

提前感谢您的帮助!

【问题讨论】:

  • str.replace 怎么样?
  • 你在哪里添加两个新字符?
  • @DontrolAltDel 对我不起作用(我猜),因为我也想将 a 更改为 au,所以我有一个无限循环。
  • 如果你向后遍历字符串,无限循环问题就会消失
  • 不是真的,因为如果有一个“u”我也遇到了同样的问题,顺便说一句改变了代码

标签: javascript string replace char


【解决方案1】:

可以使用带有替换功能的正则表达式:

let regex = '(a|e|i|o|u)'

let re = new RegExp(regex, 'g');

str = str.replace(re, replaceStr);
console.log(str)

在这种情况下不会发生无限循环,您可以用 2-3 个或更多字符替换人声

【讨论】:

  • 行得通,谢谢。只是为了兴趣,为什么这不起作用?我真的不明白:D
  • 代码中的每次插入都会增加字符串长度。当您用 2 个人声替换 1 个人声时,被替换的第二个人声将被您的循环拾取并再次用 2 个人声替换。思路如下。初始字符串:FAR。在第一次迭代中,您将 A 替换为 AU。下一个将被处理的符号是 U,它也将被替换。在第二次迭代结果是 FAUR -> FAAUR。循环采用下一个符号,它再次是声音 - FAAAUR 等无限循环:)
  • 哦……但请记住:“权力越大,责任越大。我只会在没有更简单的方法来实现预期结果时才使用正则表达式。因为每次我滥用正则表达式,另一位程序员在试图破译我造成的混乱时失去了一个周末哭到他的第四个红牛。”谢谢你:)
  • 在你告诫之后我脑海中浮现的另一个想法:替换后,按替换字符串的长度增加循环计数器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
相关资源
最近更新 更多