如何用另一个字母/特殊字符替换字符串中的所有字母?

时间:2019-07-18 16:15:47

标签: javascript node.js

我正在尝试制作一个小型节点应用程序,该应用程序可让我将文本转换为双重填充的“字母”。我对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

这可以工作,但是必须花很长时间,并且可能有更好的方法来实现。

谢谢!

3 个答案:

答案 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字符的替代方法。