从 JavaScript 中的字符串中删除特殊字符

去除字符串中的特殊字符

Remove special Characters from a String in JavaScript

使用该replace()方法从字符串中删除所有特殊字符,例如str.replace(/[^a-zA-Z0-9 ]/g, '');.

replace()方法将返回一个不包含任何特殊字符的新字符串。

索引.js
const str = 'hello 123 !@#$%^WORLD?.'; const noSpecialCharacters = str.replace(/[^a-zA-Z0-9 ]/g, ''); console.log(noSpecialCharacters); // 👉️ 'hello 123 WORLD'

我们传递给
String.replace()
方法的第一个参数是一个正则表达式。

我们使用g(全局)标志来匹配字符串中出现的所有正则表达式,而不仅仅是第一次出现。

方括号[]部分表示字符类,插入^
符号表示“不是以下字符”

^(非)符号之后我们指定:

  • 小写 (az) 和大写 (AZ) 字母的范围。这仅适用于拉丁字母表。
  • (0-9) 的一系列数字。
  • 一个空格字符。
就其整体而言,正则表达式匹配除小写和大写字母、数字和空格之外的所有字符。

[]如果您需要排除其他字符进行匹配,请将它们添加到正则表达式的方括号之间。

如果您不知道特定字符的语法,请查看
MDN regex syntax cheatsheet

使用\w特殊字符来缩短正则表达式

我们还可以使用字符来缩短正则表达式\w

索引.js
const str = 'hello 123 !@#$%^WORLD?._'; const noSpecialCharacters = str.replace(/[^\w ]/g, ''); console.log(noSpecialCharacters); // 👉️ 'hello 123 WORLD_'

这与我们之前的示例略有不同,因为\w字符匹配:

  • 小写 (az) 和大写 (AZ) 字母的范围。这仅适用于拉丁字母表。
  • (0-9) 的数字范围。
  • 下划线

检查特定字符匹配的一种非常方便的方法是查看
MDN 备忘单

排除被删除的字符

如果您需要排除其他字符被删除,请将它们添加到正则表达式的方括号之间。

索引.js
const str = 'hello 123 !@#$%^WORLD?._'; const noSpecialCharacters = str.replace(/[^\w @]/g, ''); console.log(noSpecialCharacters); // 👉️ 'hello 123 @WORLD_'

@在正则表达式的方括号之间添加了符号,以保留结果中的字符。

请注意,插入^符号必须是方括号中的第一个字符才能表示“不是以下字符”。

^如果稍后在正则表达式中使用插入符号,它将被解释为文字插入^符号。

请注意,该String.replace()方法不会更改原始字符串。相反,该方法返回一个替换了匹配项的新字符串。

# 不保留结果中的数字

如果您不想保留结果中的数字,请从正则表达式中删除数字范围。

索引.js
const str = 'hello 123 !@#$%^WORLD?.'; const noSpecialCharacters = str.replace(/[^a-zA-Z ]/g, ''); console.dir(noSpecialCharacters); // 👉️ 'hello WORLD'

如果您最终删除了被空格包围的一整组字符,则结果可能包含多个连续的空格。

如果需要用
单个空格替换多个空格,可以使用正则表达式。

索引.js
const str = 'hello 123 !@#$%^WORLD?.'; const noSpecialCharacters = str.replace(/[^a-zA-Z ]/g, ''); console.dir(noSpecialCharacters); // 👉️ 'hello WORLD' const result = noSpecialCharacters.replace(/ +/g, ' '); console.dir(result); // 👉️ 'hello WORLD'

我们使用加+号来匹配一个或多个空格,并将多个空格替换为一个空格。

# 指定我们要删除的字符

使用插入^符号指定我们要保留的字符的另一种方法是指定我们要从字符串中删除的特殊字符。

索引.js
const str = 'hello 123 !@#$%^WORLD?.{}<>'; const noSpecialCharacters = str.replace(/[@!^&\/\\#,+()$~%.'":*?<>{}]/g, ''); console.log(noSpecialCharacters); // 👉️ "hello 123 WORLD"
^我们在字符类的开头没有插入符,所以方括号中的特殊字符会被匹配并从字符串中删除。

某些字符在正则表达式中具有特殊含义,必须以反斜杠作为前缀才能被视为文字字符。

您可以在方括号之间添加要从字符串中删除的所有特殊字符。

如果您在阅读正则表达式时需要帮助,请查看
来自 MDN 的正则表达式速查表

我还写了一篇关于
如何按特殊字符拆分字符串的文章。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: