我有以下要求,其中输入的文字必须与以下任何允许的字符列表匹配, 使所有字符与reg exp模式不匹配。
特殊字符如:
我可以构建的正则表达式如下
/[^a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/]/g
对于给定的示例,请说input='123.@&-_()/*=:/\';#$%^"~!?[]av'
。无效字符为'#$%^"~!?[]'
。
以下是我获取不匹配字符的方法。
1)构建如下所示的允许reg expn模式的否定。
/^([a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/])/g
(如果此reg exp是正确的,请更正吗?)
2)使用替换功能获取所有字符
var nomatch = '';
for (var index = 0; index < input.length; index++) {
nomatch += input[index].replace(/^([a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/])/g, '');
}
so nomatch='#$%^"~!?[]' // finally
但是这里的replace函数总是返回一个不匹配的字符。所以使用循环来获取所有。如果输入为100个字符,那么它将循环100次并且是不必要的。
是否有更好的方法让所有字符与下面的行中的reg exp模式不匹配。
非常感谢您提供任何帮助。
答案 0 :(得分:5)
您可以使用反向正则表达式简化它,并用空字符串替换所有允许的字符,以便输出只剩下不允许的字符。:
var re = /[\w .@,\r\n*=:;&()'\/-]+/g
var input = '123.@&-_()/*=:/\';#$%^"~!?[]av'
var input = input.replace(re, '')
console.log(input);
//=> "#$%^"~!?[]"
&#13;
另请注意,许多特殊字符不需要在字符类中进行转义。