JavaScript删除字符串中所有非数字、字母和空格字符

6
使用JavaScript,我想要将字符串中所有非数字、字母和空格的字符删除。因此,删除像'%#$&@*这样的字符,如下所示:

Player's got to * play! #justsaying

将变成:

Players got to play justsaying

我该如何做呢?我对正则表达式不太确定。

3
也许是 [^0-9a-zA-Z ]?参见 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace - chris85
6个回答

9

正如 @chris85 所说,你可以使用正则表达式 [^0-9a-z-A-Z] 来替换所有不是字母、数字或空格的字符。

以下是一个能够实现你想要的功能的函数:

function clean(str) {
    return str.replace(/[^0-9a-z-A-Z ]/g, "").replace(/ +/, " ")
}

第二个替换操作是必要的,以便删除在空格之间删除字符所产生的额外空格。

空格应该被量化。即使有不均匀数量的空格,这仍然会有多个空格。 - chris85
我已经采纳了你的建议。 - BookOwl

4
使用replace函数。
string.replace(/[^A-Z\d\s]/gi, '')

注意正则表达式末尾的两个标志: g - 代表全局匹配,意思是会找到所有符合条件的实例 i - 代表大小写不敏感。这意味着它会匹配大小写字母
使用你的字符串进行操作,返回以下输出结果。
"Players got to  play justsaying"

为了将两个或多个空格字符转换为单个空格,您可以在现有的replace方法中添加另一个方法。

string.replace(/[^A-Z\d\s]/gi, '').replace(/\s+/g, ' ')

这里的关键是+字符,它可以匹配一个或多个。
可能有更高效的方法,但我在正则表达式方面只是个业余爱好者。

谢谢,有没有办法可以去掉双倍的空格,使得双倍的空格变成单个空格? - Holly
@Holy 同样的概念。使用 replace 将双空格替换为任何你想要的内容。Richard Hamilton 给出了很好的答案,我认为学习如何使用 string.replace 而不是询问他人如何做将对你大有裨益。 - Gillespie
修改了原始答案。 - Richard Hamilton
我会使用空格而不是\s,这样可以将所有换行符也转换为空格。 - chris85

2

我还在正则表达式中添加了符号',因为你有单词Player's,所以这是我的代码:

var str = "Player's got to * play! #justsaying";
var result = str.replace(/[^a-z\d\s']/gi, '');

@chris85 是的,你是对的\w也会匹配_。我已经更新了我的答案。谢谢! - cn007b
1
它也包含数字,因此\d是多余的。 - chris85

1

原始文本

Player's got to * play! #justsaying

正则表达式
([^a-zA-Z0-9\s])

结果

Players got to  play justsaying

TEST IT

const regex = /([^a-zA-Z0-9\s])/gm;
const str = `Player's got to * play! #justsaying`;
const subst = ``;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log(result);

请看:

参见: https://regex101.com/r/BYSDwz/4


0

0

\w = "任何单词字符",因此我要匹配除数字、单词或空格之外的任何内容。 - Nick Allan
不,它是数字、字母或下划线。http://www.regular-expressions.info/shorthand.html - chris85
哦,我明白了!谢谢,这很有用。 - Nick Allan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接