如果我有一个字符串,其中有任何类型的非字母数字字符:

"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"

我如何在JavaScript中得到一个没有标点符号的版本:

"This is an example of a string with punctuation"

当前回答

截至2021年,许多现代浏览器都支持JavaScript内置的:RegExp: Unicode属性转义。所以你现在可以简单地使用\p{p}:

str.replace(/[\p{P}$+<=>^`|~]/gu, '')

如果您想忽略所有符号(\p{S})和标点符号,则可以进一步简化正则表达式。

str.replace(str.replace(/[\p{P}\p{S}]/gu, '')

如果你想剥离除字母(\p{L}),数字(\p{N})和分隔符(\p{Z})之外的所有内容。你可以使用像这样的否定字符集(也适用于非英语字母数字字符):

str.replace(/[^\p{L}\p{N}\p{Z}]/gu, '')

上面的正则表达式可以工作,但更常见的用例是使用正则表达式的空白类而不是Unicode分隔符字符集,因为后者不包括制表符和换行符。试试这个:

str.replace(/[^\p{L}\p{N}\s]/gu, '')

const str = 'This。, -/ is #!$ % ^ & *示例;:{}= -_字符串,带有' ~)()标点符号'; console.log (str。替换(/ [\ p {p }$+<=>^`|~]/ 顾,”); console.log (str。替换(/ [\ p {p} \ p{年代}]/顾”); console.log (str。替换(/ [^ \ p {L} \ p {N} \ p {Z}] /顾”); console.log (str。替换(/ [^ \ p {L} \ p {N} \ s] /顾”);

你也可能喜欢用.replace(/ +/g, ' ')来串起连续的空格。

你可以随意摆弄这些东西!裁判: Unicode字符属性-维基百科 Unicode属性转义- MDN

其他回答

如果你想只保留字母和空格,你可以这样做:

str.replace(/[^a-zA-Z ]+/g, '').replace('/ {2,}/',' ')

对于en-US(美式英语)字符串,这应该足够了:

"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation".replace( /[^a-zA-Z ]/g, '').replace( /\s\s+/g, ' ' )

注意,如果你支持UTF-8和像chinese/russian这样的字符,这也会替换它们,所以你真的必须指定你想要什么。

它很简单,只是替换字符而不是单词:

.replace(/[^\w]/g, ' ')

这取决于你想要返回什么。我最近用了这个:

return text.match(/[a-z]/i);
str = str.replace(/[^\w\s\']|_/g, "")
         .replace(/\s+/g, " ");

删除除字母数字字符和空白之外的所有内容,然后将多个相邻空白折叠为单个空格。

详细解释:

\w是任意数字、字母或下划线。 \s是任何空白。 [^\w\s\']是指任何不是数字、字母、空格、下划线或单引号的字符。 [^\w\s\']|_与#3相同,只是加了下划线。