javascript - 如何仅将长字符串中的字母转换为相应的字母数字,并用空格分隔

标签 javascript string

我正在做作业。我需要将长字符串转换为相应的字母表数字,例如a=1,...,z=26。 我需要这些函数来忽略字母表之外的任何其他内容,即不应返回它。

示例 letterPosition("日落十二点钟落下。")

应返回“20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11”(作为字符串)。

我尝试编写此内容,但不断出现错误。我什至不确定自己在做什么。

function alphabetPosition(text) {
  var convertText = text.toLowerCase();
  var anum = {
    a: "1",
    b: "2",
    c: "3",
    d: "4",
    e: "5",
    f: "6",
    g: "7",
    h: "8",
    i: "9",
    j: "10",
    k: "11",
    l: "12",
    m: "13",
    n: "14",
    o: "15",
    p: "16",
    q: "17",
    r: "18",
    s: "19",
    t: "20",
    u: "21",
    v: "22",
    w: "23",
    x: "24",
    y: "25",
    z: "26"
  }
  var arrayText = "";
  for (var i = 0; i < convertText.length - 1; i++) {
    var alpha = convertText.charAt(i);
    if (alpha.match(/[a-z]/i)) {
      var add = anum[alpha] + " ";
      arrayText += add;
    }
  }
  return arrayText;
}

最佳答案

首先将所有非字母字符替换为空字符串,将字母字符串转换为数组。之后,您可以使用 Array.prototype.map 将每个字符转换为其字符代码(从 a = 1 开始):

const alphabetPosition = (str) => {
  const lowerAlphabeticalString = str
    .toLowerCase()
    .replace(/[^a-z]/g, '');   // replace all non-alphabetical characters
  return [...lowerAlphabeticalString]  // turn the string into an array
    .map(char => char.charCodeAt() - 96) // transform each character into its code
    .join(' '); // join the array by spaces so it becomes a string again
};

console.log(alphabetPosition("The sunset sets at twelve o' clock."));

- 96 之所以存在,是因为 a 的字符代码是 97,b 的字符代码是 98,依此类推 -因此,要使 a 对应于 1b 对应于 2,请减去 96。

如果您愿意,您也可以使用单个正则表达式来完成此操作,但它的可读性不太好:

const alphabetPosition = (str) => str.replace(
  /[^a-z]*([a-z])[^a-z]*/gi,
  (_, char) => (char.toLowerCase().charCodeAt() - 96) + ' '
).trim(); // remove trailing space created by last replacement

console.log(alphabetPosition("The sunset sets at twelve o' clock."));

关于javascript - 如何仅将长字符串中的字母转换为相应的字母数字,并用空格分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57846094/

相关文章:

javascript - 如何在javascript中从数组中删除某些数字元素

python - 如何在 Python 中部分拆分并获取字符串的第一部分?

java - 如何排除字符串中大写的特定单词?

c# - 在 C# 中生成多个唯一字符串

c++ - 反转非 ASCII 字符的字符串

c - 如何最好地增强我的程序以利用 strcmp 的时序优化?

javascript - 使用 redux-form 根据另一个字段的值显示/隐藏字段

javascript - Bookshelfjs where 连接子句

javascript - MEAN.js 和 MEAN.io 的区别

javascript - 具有局部 View 的 Laravel 4 ajax