我知道regex是可能的,但我想同时编辑很多东西。最小化链接。它只是在代码上看起来不太好。
例如,
假设字母表是混乱的
A将是E
B将是H
E将是D
如何使用最少的函数将ABE更改为EHD?为了清楚起见,我有一个物体,上面有这个混乱的字母表。
TL;DR:
批量更新字符串中字母到指定对应字母的最佳方式?
您可以编写一些逻辑,将字符串拆分为一个字符数组,然后使用map()
比较单独的值,并在需要时进行替换。然后将数组连接回字符串。
const original = "ABE";
const splitted = original.split("");
const replaced = splitted.map((letter) => {
if(letter === "A") return "E"
if(letter === "B") return "H"
if(letter === "E") return "D"
return letter
});
console.log(replaced.join(""));
最简单的方法是使用正则表达式,但也可以将其与替换函数配对:
const substitutions = {
"A": "E",
"B": "H",
"E": "D"
};
function transform(input) {
return input.replace(/./g, char => {
const sub = substitutions[char] ?? char;
return sub;
});
}
console.log(transform("HELLO WORLD!"));
console.log(transform("BEAUTIFUL!"));
console.log(transform("BOATS ARE EXCELLENT 👍"));
正则表达式/./g
只匹配每一个字符,然后replacer函数检查它是否存在于substitutions
中并返回。或者,如果它不存在,由于零合并运算符(??
(,它会返回到相同的字符。
这要求您在substitutions
中明确指定小写和大写字符。
const substitutions = {
"a": "e",
"A": "E",
"b": "h",
"B": "H",
"e": "d",
"E": "D"
};
function transform(input) {
return input.replace(/./g, char => {
const sub = substitutions[char] ?? char;
return sub;
});
}
console.log(transform("Hello world!"));
console.log(transform("Beautiful!"));
console.log(transform("Boats Are Excellent 👍"));
如果您总是希望替换与大小写(a -> e
和A -> E
(匹配,并且不希望substitutions
中有额外的条目,那么您可以检查字符的大小写并转换替换:
const substitutions = {
"A": "E",
"B": "H",
"E": "D"
};
function transform(input) {
return input.replace(/./g, char => {
const upperChar = char.toLocaleUpperCase();
if (!(upperChar in substitutions))
return char;
const isUpper = char === upperChar;
const sub = substitutions[upperChar];
if (isUpper)
return sub.toLocaleUpperCase();
return sub.toLocaleLowerCase();
});
}
console.log(transform("Hello world!"));
console.log(transform("Beautiful!"));
console.log(transform("Boats Are Excellent 👍"));