使用JavaScript移除除字母数字和空格以外的所有字符

29
2个回答

67
input.replace(/[^\w\s]/gi, '')

毫不客气地从另一个答案中窃取。字符类中的^表示“不是”,因此这是“不是”\w(等同于\W)而不是空格字符(空格,制表符等)\s。如果需要,您可以直接使用文本


这个可以工作,但是对于像倾斜引号’”“这样的特殊字符不适用。 - Aaron
你是什么意思?你是想包含那些字符还是排除它们? - Explosion Pills
不完全。普通的 ASCII 引号可以工作,但是当从 PDF 复制和粘贴文本时,尖角引号不会被删除,而常规引号则会被删除。 - Aaron
我真的不知道该说什么.. 我无法重现这个问题。 - Explosion Pills
2
[^\w] = \W,而 [^\s] = \S。因此正则表达式可以简化为 /[\W\S]/g。忽略大小写修饰符不是必须的,因为\W已经考虑到了这些内容。 - 3limin4t0r
也删除国际字符,如 ş 和 ö。 - Nime Cloud

4

我知道这是一个老帖子,但它非常受欢迎,以至于在谷歌搜索中排名靠前。因此,作为一种替代方案,3limin4t0r的接受答案和评论激发了我的灵感:

.replace(/\W+/g, " ")

在我看来

const input = document.querySelector("input");
const button = document.querySelector("button");
const output = document.querySelector("output");

button.addEventListener("click", () => {
    output.textContent = input.value.replace(/\W+/g, " ");
})
<input>
<button>Replace</button>
<p>
  <output></output>
</p>


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