如何解决如何将字符串中 1-9 的所有数字替换为它们在 Javascript 中拼写出来的等价物?
我想将字符串中从 1 到 9 的所有数字更改为它们拼写出来的等价物,例如将所有 1 更改为 1,将 3 更改为 3 等。
我像这样试过 string.replace()
:
let string = "I have 3 cats";
string = string.replace(/3/g,"three");
这对上面的字符串工作正常,但它也会将 33 更改为 Threethree,这不是我想要的。我也试过
string = string.replaceAll(" 3 ","three);
但这导致以“5 美元是很多钱”这样的数字开头的字符串被忽略了。我该怎么办?
编辑:如果我没有把我的问题说清楚,我很抱歉。我希望大于 1-9 的数字(例如 33)保持为 33,并且只更改 9 个数字。
解决方法
您想替换 3
而不是 33
?您可以使用正则表达式边界 \b
或整个单词
numbers = ['zero','one','two','three','four','five','six','seven','eight','nine'];
var s = "I have 3 cats with 33 lives";
result = s.replace(/\b\d\b/g,m => numbers[m])
console.log(result)
let string = "I have 3 cats. 55 dollars is a lot of money. 2 dollar is fine";
let numbersList = ['zero','nine'];
string = string.split(" ").map(val => numbersList[val] || val).join(" ");
console.log(string);
您可以使用一个函数来替换和搜索数字并将其替换为一个值。
实施的方法最多适用于 999
。
function wordify(n) {
n = +n;
let word = [],numbers = { 1: 'one',2: 'two',3: 'three',4: 'four',5: 'five',6: 'six',7: 'seven',8: 'eight',9: 'nine',10: 'ten',11: 'eleven',12: 'twelve',t3: 'thir',t5: 'fif',t8: 'eigh',20: 'twenty' },hundreds = 0 | (n % 1000) / 100,tens = 0 | (n % 100) / 10,ones = n % 10;
if (n === 0) {
return 'zero';
}
if (hundreds) {
word.push(numbers[hundreds] + ' hundred');
}
if (tens === 0) {
word.push(numbers[ones]);
} else if (tens === 1) {
word.push(numbers['1' + ones] || (numbers['t' + ones] || numbers[ones]) + 'teen');
} else {
word.push(numbers[tens + '0'] || (numbers['t' + tens] || numbers[tens]) + 'ty');
if (numbers[ones]) {
word.push(numbers[ones]);
}
}
return word.join(' ');
}
let string = "I have 3 cats. 55 dollars is a lot of money."
string = string.replace(/\d+/g,wordify);
console.log(string);
您需要使用正则表达式来识别可变长度的数字并使用函数参数将每个匹配的数字转换为其等效的英文单词。您使用的表达式仅搜索单次出现的 3。 使用下面的代码:
1: 'one',13: 'thirteen',14: 'fourteen',15: 'fifteen',16: 'sixteen',17: 'seventeen',18: 'eighteen',19: 'nineteen',20: 'twenty',30: 'thirty',40: 'forty',50: 'fifty',60: 'sixty',70: 'seventy',80: 'eighty',90: 'ninety',100: 'hundred',1000: 'thousand',}
const numberValues = Object.keys(numberText)
.map((val) => Number(val))
.sort((a,b) => b - a)
const convertNumberToEnglishText = (n) => {
if (n === 0) return 'zero'
if (n < 0) return 'negative ' + convertNumberToEnglishText(-n)
let num = n
let text = ''
for (const numberValue of numberValues) {
const count = Math.trunc(num / numberValue)
if (count < 1) continue
if (numberValue >= 100) text += convertNumberToEnglishText(count) + ' '
text += numberText[numberValue] + ' '
num -= count * numberValue
}
if (num !== 0) throw Error('Something went wrong!')
return text.trim()
}
let input ="I have 3 cats and 567 dogs";
// console.log(input.replace(/\d+/g,'T'));
console.log(input.replace(/\d+/g,(match) => {
return convertNumberToEnglishText(match)
}));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。