如何在 JavaScript 中用正则表达式用字母替换数字?

How to replace numbers with letters with regular expressions in JavaScript?

我有这样一串数字和字母:

let cad = "123941A120"

我需要用这些替换来转换它:A = 10,B = 11,C = 12,...,Z = 35。 例如,上面的字符串将导致以下结果,其中 A 替换为 1012394110120.

另一个例子:

Input:  158A52C3
Output: 1581052123

你可以这样做:

const arr = [
  { A: 10 },
  { B: 11 },
  { C: 12 },
  // ...
]

const input = '158A52C3'
const output = arr.reduce((a, c) => {
  const [[k, v]] = Object.entries(c)
  return a.replace(new RegExp(k, 'g'), v)
}, input)

console.log(output)

这样做无需映射所有字母代码,假设相邻字母具有相邻代码...

result = "158A52c3".replaceAll(/[A-Z]/ig, (c) => {
    offset = 10;
    return c.toUpperCase().charCodeAt(0) - "A".charCodeAt(0) + offset;
})
    
console.log(result);

您可以执行以下操作:

const letters = {
'A':10,
'B':11,
'C':12
}
let cad = '123941A120'
for(let L in letters){
cad = can.replace(L,letters[L])
}
console.log(cad)

您要做的是将每个数字转换为以 10 为底数。由于每个数字都在 0、1、...、8、9、A、B、...、Y、Z 范围内,您正在处理 base-36 字符串。因此,可以使用parseInt

const convertBase36DigitsToBase10 = (input) => Array.from(input, (digit) => {
    const convertedDigit = parseInt(digit, 36);
    
    return (isNaN(convertedDigit)
      ? digit
      : String(convertedDigit));
  }).join("");

console.log(convertBase36DigitsToBase10("158A52C3")); // "1581052123"
console.log(convertBase36DigitsToBase10("Hello, world!")); // "1714212124, 3224272113!"


如果你真的想坚持使用正则表达式, is a good starting point, although there’s no need for “regex dogmatism”