use*_*040 4 javascript regex performance
我有以下要求,其中输入的文本必须匹配以下任何允许的字符列表,并获得所有不匹配reg exp模式的字符.
和特殊字符如:
我可以构建的正则表达式如下
/[^a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/]/g
Run Code Online (Sandbox Code Playgroud)
举个例子,比如说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
Run Code Online (Sandbox Code Playgroud)
但是这里的replace函数总是返回一个不匹配的字符.所以使用循环来获取所有.如果输入为100个字符,则它循环100次并且是不必要的.
有没有更好的方法让所有字符与下面的行中的reg exp模式不匹配.
非常感谢您对此提供任何帮助.
您可以使用反向正则表达式简化它,并用空字符串替换所有允许的字符,以便输出只剩下不允许的字符:
var re = /[\w .@,\r\n*=:;&()'\/-]+/g
var input = '123.@&-_()/*=:/\';#$%^"~!?[]av'
var input = input.replace(re, '')
console.log(input);
//=> "#$%^"~!?[]"Run Code Online (Sandbox Code Playgroud)
另请注意,许多特殊字符不需要在字符类中进行转义.
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |