从字符串中删除标点符号?
Removing punctuation from strings?
我正在研究回文函数,发现了一个从字符串中删除标点符号的公式。
var punctuation = /[\u2000-\u206F\u2E00-\u2E7F\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/g;
var spaceRE = /\s+/g;
var str = "randomstringwith*&^%"
var testStr = str.replace(punctuation, '').replace(spaceRE, '')
document.write(testStr);
我的问题是,如果我删除 .replace(spaceRE, '')
,结果似乎没有任何变化。有没有我遗漏的东西,或者这个公式有多余的代码吗?我对 str.replace(punctuation,'');
的使用也有点困惑
punctuation
表示任何非 letter/number 字符,''
将它们替换为空字符串,对吗?谢谢!
原来 var spaceRE = /\s+/g;
删除了字符串中的所有空格,而 punctuation
删除了标点符号。用空字符串同时替换两者会生成一个没有标点符号或空格的字符串,并将其保存到 testStr
在像你这样的情况下,你必须问问自己哪个更容易:
- 创建一个 REGEXP 阻止 某些字符
- 创建 允许 特定字符
的 REGEXP
您的选择应该取决于哪个工作量少且更可靠。
编写一个阻止所有符号的模式取决于您记住每个可能的符号 - 不仅仅是标点符号,还有表情符号模式、数学符号等等。
如果你只想允许数字和字母,你可以这样做:
str.replace(/\W/g, '');
\W
/ 是“non-alphanumeric”字符的别名。这里唯一的警告是字母数字包括下划线,所以如果你也想阻止它们:
str.replace(/\W|_/g, '');
我正在研究回文函数,发现了一个从字符串中删除标点符号的公式。
var punctuation = /[\u2000-\u206F\u2E00-\u2E7F\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/g;
var spaceRE = /\s+/g;
var str = "randomstringwith*&^%"
var testStr = str.replace(punctuation, '').replace(spaceRE, '')
document.write(testStr);
我的问题是,如果我删除 .replace(spaceRE, '')
,结果似乎没有任何变化。有没有我遗漏的东西,或者这个公式有多余的代码吗?我对 str.replace(punctuation,'');
punctuation
表示任何非 letter/number 字符,''
将它们替换为空字符串,对吗?谢谢!
原来 var spaceRE = /\s+/g;
删除了字符串中的所有空格,而 punctuation
删除了标点符号。用空字符串同时替换两者会生成一个没有标点符号或空格的字符串,并将其保存到 testStr
在像你这样的情况下,你必须问问自己哪个更容易:
- 创建一个 REGEXP 阻止 某些字符
- 创建 允许 特定字符 的 REGEXP
您的选择应该取决于哪个工作量少且更可靠。
编写一个阻止所有符号的模式取决于您记住每个可能的符号 - 不仅仅是标点符号,还有表情符号模式、数学符号等等。
如果你只想允许数字和字母,你可以这样做:
str.replace(/\W/g, '');
\W
/ 是“non-alphanumeric”字符的别名。这里唯一的警告是字母数字包括下划线,所以如果你也想阻止它们:
str.replace(/\W|_/g, '');