gpt4 book ai didi

javascript - 替换字符串中不同字符的函数

转载 作者:行者123 更新时间:2023-11-30 08:52:07 26 4
gpt4 key购买 nike

我正在尝试编写一个 javascript 函数来替换字符串中的某些字符。例如,如果我想在字符串“a b”中将“a”替换为“ab”,将“b”替换为“c”,函数应该给我字符串“ab c”。在这种情况下,我不能先用“a”替换字符串,然后再用“b”替换结果,因为那样会得到“ac b”而不是“ab c”。

关于如何有效地做到这一点有什么想法吗?

最佳答案

您可以使用正则表达式来匹配不同的字符,并使用回调函数来确定用什么来替换它。因为它在一次运行中完成所有替换,所以一个替换包含另一个要替换的东西是没有问题的:

s = s.replace(/[ab]/g, function(m){
switch (m) {
case 'a': return 'ab';
case 'b': return 'c';
}
return m;
});

演示:http://jsfiddle.net/Guffa/pXSM5/

编辑:

要使用正则表达式来匹配每个字符串,遍历它们并找到每个匹配项,然后遍历找到的匹配项并替换它们。从字符串中的最后一个开始进行替换是最简单的,这样当替换的长度与匹配的字符串的长度不同时,您不必调整其他匹配项的索引:

var s = "a b";
var re = [{ regex: /a/g, replace: 'ab'}, { regex: /b/g, replace: 'c' }];
var pos = [];

for (var i = 0; i < re.length; i++) {
while ((r = re[i].regex.exec(s)) != null) {
pos.push({ index: r.index, match: r[0], replace: re[i].replace });
}
}

while (pos.length > 0) {
var last = 0;
for (var i = 0; i < pos.length; i++) {
if (pos[i].index > pos[last].index) last = i;
}
var p = pos[last];
s = s.substr(0, p.index) + p.replace + s.substr(p.index + p.match.length);
pos.splice(last, 1);
}

演示:http://jsfiddle.net/Guffa/pXSM5/1/

注意:确保正则表达式不匹配任何可以重叠的内容。

关于javascript - 替换字符串中不同字符的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com