我正在尝试制作一个小型节点应用程序,该应用程序可让我将文本转换为双重填充的“字母”。我对JavaScript相当陌生,我想知道这样做的最佳方法是什么?
我可以使用:string.replace("A", doublestruck.uppercase.A)
(请参见下文)62(26个大写字母,26个小写字母,10个数字),但是我觉得绝对有更好的方法。
// specialcharacters.js
const doubleStruckUpper = {
A: "?", B: "?", C: "ℂ", D: "?", E: "?",
F: "?", G: "?", H: "ℍ", I: "?", J: "?",
K: "?", L: "?", M: "?", N: "ℕ", O: "?",
P: "ℙ", Q: "ℚ", R: "ℝ", S: "?", T: "?",
U: "?", V: "?", W: "?", X: "?", Y: "?",
Z: "ℤ"
};
const doubleStruckLower = { ... };
const doubleStruckNumbers = { ... };
module.exports.doubleStruck = {
uppercase: doubleStruckUpper,
lowercase: doubleStruckLower,
numbers: doubleStruckNumbers,
};
// index.js
const { doubleStruck } = require("./specialcharacters");
var string = "Change this to double-struck characters";
string
.replace("A", doubleStruck.uppercase.A)
.replace("B", doubleStruck.uppercase.B)
// and so on
这可以工作,但是必须花很长时间,并且可能有更好的方法来实现。
谢谢!
答案 0 :(得分:5)
.replace
可让您use a function:
const doubleStruckUpper = {
A: "?", B: "?", C: "ℂ", D: "?", E: "?",
F: "?", G: "?", H: "ℍ", I: "?", J: "?",
K: "?", L: "?", M: "?", N: "ℕ", O: "?",
P: "ℙ", Q: "ℚ", R: "ℝ", S: "?", T: "?",
U: "?", V: "?", W: "?", X: "?", Y: "?",
Z: "ℤ"
};
var string = "CHANGE THIS TO DOUBLE STRUCK LETTERS";
var result = string.replace(/[A-Z]/g, matchedLetter => doubleStruckUpper[matchedLetter]);
console.log(result);
与正则表达式结合使用,您可以找到并匹配所有所需的字符,并用所需的字符逐一替换。既然您已经创建了角色图,那么这应该是一个相当快速且容易的过程,尽管我建议您将角色图组合到单个图中以使其变得更快,更简单。
答案 1 :(得分:0)
另一个示例是map
中的每个字符string
要被两次击中。如果您不需要在3张不同的地图中保留双击字符,我建议将它们合并为一张地图(例如:doubleStruckAll
),那么您可以简单地按如下所示进行映射:
var string = "Change this to double-struck characters";
const result = [...string].map(letter => {
const replaced = doubleStruckAll[letter];
return replaced ? replaced : letter;
}).join('')
console.log(result);
上面的代码将字符串扩展为字符数组,然后将每个字符映射为两次击键(如果条目以两次击键形式出现,则返回替换的字符,否则返回原始字符)。然后它将新数组重新连接到字符串中。
答案 2 :(得分:0)
ES6 / ES2015通过将代码包装在图括号中,引入了一种在星体平面中表示Unicode点的方法(任何需要超过4个字符的Unicode代码点)。
const unicodePoints = {
A: '\u{1D538}',
B: '\u{1D539}',
C: '\u{2102}',
D: '\u{1D53B}',
E: '\u{1D53C}',
F: '\u{1D53D}',
G: '\u{1D53E}',
H: '\u{210D}',
I: '\u{1D540}',
J: '\u{1D541}',
K: '\u{1D542}',
L: '\u{1D543}',
M: '\u{1D544}',
N: '\u{2115}',
O: '\u{1D546}',
P: '\u{2119}',
Q: '\u{211A}',
R: '\u{211D}',
S: '\u{1D54A}',
T: '\u{1D54B}',
U: '\u{1D54C}',
V: '\u{1D54D}',
W: '\u{1D54E}',
X: '\u{1D54F}',
Y: '\u{1D550}',
Z: '\u{2124}'
};
console.log("CHANGE THIS TO DOUBLE STRUCK LETTERS".replace(/[A-Z]/g, el => unicodePoints[el].normalize()));
您可以将其用作在地图中使用文字Unicode字符的替代方法。