如果我有一个包含任何类型的非字母数字字符的字符串:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
我如何在 JavaScript 中获得它的无标点版本:
"This is an example of a string with punctuation"
如果我有一个包含任何类型的非字母数字字符的字符串:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
我如何在 JavaScript 中获得它的无标点版本:
"This is an example of a string with punctuation"
如果您想从字符串中删除特定的标点符号,最好明确删除您想要的内容
replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"")
执行上述操作仍然不会返回您指定的字符串。如果您想删除因删除疯狂标点符号而留下的任何额外空格,那么您将想要做类似的事情
replace(/\s{2,}/g," ");
我的完整示例:
var s = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var punctuationless = s.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"");
var finalString = punctuationless.replace(/\s{2,}/g," ");
在 firebug 控制台中运行代码的结果:
str = str.replace(/[^\w\s]|_/g, "")
.replace(/\s+/g, " ");
删除除字母数字字符和空格之外的所有内容,然后将多个相邻的空格折叠为单个空格。
详细解释:
\w
是任何数字、字母或下划线。\s
是任何空格。[^\w\s]
是不是数字、字母、空格或下划线的任何东西。[^\w\s]|_
除了重新添加下划线外,与 #3 相同。以下是 US-ASCII 的标准标点符号: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
对于 Unicode 标点符号(例如弯引号、长破折号等),您可以轻松匹配特定的块范围。在一般标点符号块\u2000-\u206F
,并补充标点符号块\u2E00-\u2E7F
。
放在一起并正确转义,您将获得以下 RegExp:
/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/
这应该与您遇到的几乎所有标点符号相匹配。所以,要回答原来的问题:
var punctRE = /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/g;
var spaceRE = /\s+/g;
var str = "This, -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
str.replace(punctRE, '').replace(spaceRE, ' ');
>> "This is an example of a string with punctuation"
US-ASCII 源:http : //docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
Unicode 源码:http : //kourge.net/projects/regexp-unicode-block
/[^A-Za-z0-9\s]/g 应该匹配所有标点符号但保留空格。因此,.replace(/\s{2,}/g, " ")
如果需要,您可以使用来替换额外的空格。您可以在http://rubular.com/ 中测试正则表达式
.replace(/[^A-Za-z0-9\s]/g,"").replace(/\s{2,}/g, " ")
更新:仅当输入为 ANSI 英语时才有效。
我遇到了同样的问题,这个解决方案成功了,并且非常易读:
var sentence = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var newSen = sentence.match(/[^_\W]+/g).join(' ');
console.log(newSen);
结果:
"This is an example of a string with punctuation"
诀窍是创建一个否定集。这意味着它匹配不在集合内的任何东西,即[^abc]
- 不是a、b或c
\W
是任何非单词,因此[^\W]+
将否定任何不是单词char 的内容。
通过添加 _(下划线),您也可以否定它。
让它全局应用/g
,然后你可以通过它运行任何字符串并清除标点符号:
/[^_\W]+/g
漂亮干净;)