我想从字符串中删除数字:
questionText = "1 ding ?"
我要替换1
数字和问号?
。可以是任何数字。我尝试了以下无效代码。
questionText.replace(/[0-9]/g, '');
我想从字符串中删除数字:
questionText = "1 ding ?"
我要替换1
数字和问号?
。可以是任何数字。我尝试了以下无效代码。
questionText.replace(/[0-9]/g, '');
Answers:
非常接近,请尝试:
questionText = questionText.replace(/[0-9]/g, '');
replace
在现有字符串上不起作用,它将返回一个新字符串。如果要使用它,则需要保留它!
同样,您可以使用一个新变量:
var withNoDigits = questionText.replace(/[0-9]/g, '');
最后一个技巧是一次删除整个数字块,但是那可能太过分了:
questionText = questionText.replace(/\d+/g, '');
字符串是不可变的,这就是为什么questionText.replace(/[0-9]/g, '');
它本身可以工作,但它不会更改问题文本字符串的原因。您必须将替换结果分配给另一个String变量,或者再次将问题本身分配给questionText。
var cleanedQuestionText = questionText.replace(/[0-9]/g, '');
或1\d+
步(使用,请参阅Kobi的答案):
questionText = ("1 ding ?").replace(/\d+/g,'');
并且如果您想修剪前(后)空格,请执行以下操作:
questionText = ("1 ding ?").replace(/\d+|^\s+|\s+$/g,'');
/g
了所有正则表达式-JavaScript令人讨厌:)
第二种选择是匹配并返回具有某些类似表达式的非数字,
/\D+/g
这可能适用于问题(1 ding ?
)中的特定字符串。
function non_digit_string(str) {
const regex = /\D+/g;
let m;
non_digit_arr = [];
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match, groupIndex) => {
if (match.trim() != '') {
non_digit_arr.push(match.trim());
}
});
}
return non_digit_arr;
}
const str = `1 ding ? 124
12 ding ?
123 ding ? 123`;
console.log(non_digit_string(str));
如果您想简化/修改/探索表达式,请在regex101.com的右上方面板中进行说明。如果您愿意,您还可以在此链接中观看,它如何与一些示例输入匹配。
jex.im可视化正则表达式:
您可以使用.match && join()方法。.match()返回一个数组,.join()生成一个字符串
function digitsBeGone(str){
return str.match(/\D/g).join('')
}