我有以下要求,其中输入的文本必须匹配以下任何允许的字符列表,并且获取所有不匹配 reg exp 模式的字符。
- 0-9
- A-Z,a-z
特殊字符如:
- 空格,.@,-_&()'/*=:;
- 回车
- 行尾
我可以构建的正则表达式如下
/[^a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/]/g
对于给定的示例,假设 input='123.@&-_()/*=:/\';#$%^"~!?[]av'
。无效字符是'#$%^"~!?[]'
。
以下是我获取不匹配字符的方法。
1) 如下所示构造允许的 reg expn 模式的否定。
/^([a-zA-Z0-9\\.@\,\r\n*=:;\-_\&()\'\/])/g
(请更正此 reg exp 是否正确?)
2) 使用replace函数获取所有字符
var nomatch = '';
for (var index = 0; index < input.length; index++) {
nomatch += input[index].replace(/^([a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/])/g, '');
}
so nomatch='#$%^"~!?[]' // finally
但是这里的替换函数总是返回一个不匹配的字符。所以使用循环来获取所有。如果输入是 100 个字符,那么它会循环 100 次并且是不必要的。
有没有更好的方法让所有字符在下面的行中不匹配 reg exp 模式。
- 一个更好的正则表达式来获取不允许的字符(比我上面使用的 reg exp 的否定)?
- 避免不必要的循环?
- 单行方法?
非常感谢您对此提供的任何帮助。
最佳答案
您可以使用反向正则表达式简化它,并将所有允许的字符替换为空字符串,这样输出将只剩下不允许的字符。
var re = /[\w .@,\r\n*=:;&()'\/-]+/g
var input = '123.@&-_()/*=:/\';#$%^"~!?[]av'
var input = input.replace(re, '')
console.log(input);
//=> "#$%^"~!?[]"
另请注意,许多特殊字符不需要在字符类中转义。
关于javascript - 获取所有不匹配Javascript中的正则表达式模式的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44630022/