如何从字符串中删除数字?


81

我想从字符串中删除数字:

questionText = "1 ding ?"

我要替换1数字和问号?。可以是任何数字。我尝试了以下无效代码。

questionText.replace(/[0-9]/g, '');

3
到底什么不起作用?因为它正在删除号码……
Felix Kling

您还需要删除小数点吗?
glowworms

1
@Berbi这个问题不是重复的。引用的一个“替换方法不起作用”没有正确的标题,因此用户可以键入并搜索“从字符串中删除数字”。差劲的节制。
Gilberto Albino 2014年

Answers:


160

非常接近,请尝试:

questionText = questionText.replace(/[0-9]/g, '');

replace在现有字符串上不起作用,它将返回一个新字符串。如果要使用它,则需要保留它!
同样,您可以使用一个新变量:

var withNoDigits = questionText.replace(/[0-9]/g, '');

最后一个技巧是一次删除整个数字块,但是那可能太过分了:

questionText = questionText.replace(/\d+/g, '');

我可以更换吗?&*从字符串中的一种替换方法中,例如str.replace(“?,*”,“”);
kiran

那是行不通的,我想替换两者吗?和*在我的字符串中带有空格
kiran

@kiran-例如\?,\*,记得逃避它们,但是您可能想要/[?*]/g遇到一个新问题时,随时提出
科比

11

字符串是不可变的,这就是为什么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令人讨厌:)
Kobi

9

你很亲密

这是您在问题中编写的代码:

questionText.replace(/[0-9]/g, '');

您编写的代码确实查看了questionText变量,并产生了原始字符串的输出,但数字替换为空字符串。

但是,它不会自动将其分配回原始变量。您需要指定将其分配给的内容:

questionText = questionText.replace(/[0-9]/g, '');

1

只是想添加一下,因为它可能引起某人的兴趣,所以您也可能以其他方式考虑该问题。我不确定在这里是否有意义,但是我认为它是相关的。

换句话说,我的意思是说:“带走我所不想要的任何东西,即,如果您只想要'叮',您可以说:

var strippedText =(“ 1 ding?”)。replace(/ [^ a-zA-Z] / g,'');

这基本上意味着“删除任何以no,a,b,c,d .... Z(任何字母)开头的内容。


1

第二种选择是匹配并返回具有某些类似表达式的非数字,

/\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的右上方面板中进行说明。如果您愿意,您还可以在此链接中观看,它如何与一些示例输入匹配。


RegEx电路

jex.im可视化正则表达式:

在此处输入图片说明


0

没有regex它,可以这样做,效率更高:

var questionText = "1 ding ?"
var index = 0;
var num = "";
do
{
    num += questionText[index];
} while (questionText[++index] >= "0" && questionText[index] <= "9");
questionText = questionText.substring(num.length);

作为奖励,它还会存储数字,这对某些人可能有用。


0

您可以使用.match && join()方法。.match()返回一个数组,.join()生成一个字符串

function digitsBeGone(str){
  return str.match(/\D/g).join('')
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.