Javascript regex特殊字符



我有一个特殊字符列表,我想从字符串中删除,列表如下:(以空格分隔)

! % & ' ( ) * + - . / ; < = > ? \ , : # @ 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.
}

最新更新