我有一个特殊字符列表,我想从字符串中删除,列表如下:(以空格分隔)
! % & ' ( ) * + - . / ; < = > ? \ , : # @ t r n " [] _
我试图像这样替换我的功能,但我遇到了像//
, t
, r
, n
和[]
这样的字符的麻烦
var input = 'test ! % & ' ( ) * + - . / ; < = > ? \ , : # @ t r n " [] _ test';
input.replace(/[!%&'()*+-./;<=>?\,:#@trn"[]_][u007B-u00BF]/g, "");
是否有更好的方法来正确地做到这一点?或者是否有可能以某种方式使用数组作为受限字符?
您可以使用以下正则表达式:
var input = 'test ! % & \ ' ( ) * + - . / ; < = > ? \ , : # @ t r n " [] _ test';
alert(input.replace(/[!%&'()*+./;<=>?\,/:#@trn"[]_u007B-u00BF-]/g, ""));
注意,你需要在JS正则表达式字符类中转义[
和]
。连字符应该放在末尾或转义。此外,我猜你还想删除u007B-u00BF
范围内的字符,所以我将2个字符类"合并"为1.
某些字符需要用反斜杠转义。
这些字符是.^$*+?()[{|-
您还需要转义/
,因为您正在使用js文字。
另外,结尾有[u007B-u00BF]
意味着它只匹配后面跟着这些字符之一的字符。从你的问题中不清楚这是否是你真正想要的。
所以你的正则表达式应该是:
input.replace(/[!%&'()*+-./;<=>?\,:#@trn"[]_][u007B-u00BF]/g, "");
下面是第一部分的例子
var re = /[a-z()!%$\@<>=?/.-;,#[]_*&+-"]/g;
var str = 'test ! % & ' ( ) * + - . / ; < = > ? \ , : # @ t r n " [] _ test';
var m;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}