28

如何删除所有内容,但:

字符串中的字母、数字、空格、感叹号、问号?

该方法支持国际语言 (UTF-8),这一点很重要。

4

4 回答 4

56

您可以使用正则表达式

myString.replace(/[^\w\s!?]/g,'');

这将替换除单词字符、空格、感叹号或问题之外的所有内容。

Character Class\w代表“单词字符”,通常是[A-Za-z0-9_]. 注意包含下划线和数字。

\s代表“空白字符”。它包括[ \t\r\n].

如果你不想要下划线,你可以使用 just [A-Za-z0-9]

myString.replace(/[^A-Za-z0-9\s!?]/g,'');

对于 unicode 字符,您可以\u0000-\u0080在表达式中添加类似的内容。这将排除该 unicode 范围内的所有字符。您必须指定不想删除的字符的范围您可以在Unicode Map上查看所有代码。只需添加您想要保留的字符或一系列字符。

例如:

myString.replace(/[^A-Za-z0-9\s!?\u0000-\u0080\u0082]/g,'');

这将允许所有前面提到的字符,范围从\u0000-\u0080\u0082。它将删除\u0081.

于 2012-09-09T22:21:01.997 回答
7

到目前为止发布的两个答案都没有问号。我会评论他们,但还没有足够的代表。

大卫是正确的,sachleen 的正则表达式会留下下划线。rcdmk 的正则表达式,修改如下,可以解决问题,但如果您关心国际字符,事情可能会变得更加复杂。

var result = text.replace(/[^a-zA-Z0-9\s!?]+/g, '');

这将留下新的行和制表符以及空格。如果您还想删除新的行和标签,请将其更改为:

var result = text.replace(/[^a-zA-Z0-9 !?]+/g, '');
于 2012-09-09T22:30:33.893 回答
5
text = "A(B){C};:a.b*!c??!1<>2@#3"
result = text.replace(/[^a-zA-Z0-9]/g, '')

应该返回ABCabc123

首先,我们将文本定义为,A B C a b c 1 2 3但随机字符设置result为:

text.replace(...)其中参数是:

/.../g, /.../:^表示反转;不要删除以下字母:

a-z(小写字母)、A-Z(大写字母)和0-9(数字)

g表示全局,删除所有匹配项,而不仅仅是第一个匹配项

第二个参数是替换字符,我们将其设置为空字符串,以便它只保留指定的字符串。如果指定,它将返回:"A B C a b c 1 2 3"

于 2016-04-26T12:41:42.580 回答
3

您可以尝试使用正则表达式,例如:var cleaned = someString.replace(/[^a-zA-Z0-9! ]+/g, "");

于 2012-09-09T22:20:26.380 回答