如何在 JavaScript 中用正则表达式用字母替换数字?
How to replace numbers with letters with regular expressions in JavaScript?
我有这样一串数字和字母:
let cad = "123941A120"
我需要用这些替换来转换它:A = 10,B = 11,C = 12,...,Z = 35。
例如,上面的字符串将导致以下结果,其中 A
替换为 10
:12394110120
.
另一个例子:
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”。
我有这样一串数字和字母:
let cad = "123941A120"
我需要用这些替换来转换它:A = 10,B = 11,C = 12,...,Z = 35。
例如,上面的字符串将导致以下结果,其中 A
替换为 10
:12394110120
.
另一个例子:
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!"
如果你真的想坚持使用正则表达式,