javascript - 获取所有不匹配Javascript中的正则表达式模式的字符

标签 javascript regex performance

我有以下要求,其中输入的文本必须匹配以下任何允许的字符列表,并且获取所有不匹配 reg exp 模式的字符。

  1. 0-9
  2. A-Z,a-z

特殊字符如:

  1. 空格,.@,-_&()'/*=:;
  2. 回车
  3. 行尾

我可以构建的正则表达式如下

/[^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 模式。

  1. 一个更好的正则表达式来获取不允许的字符(比我上面使用的 reg exp 的否定)?
  2. 避免不必要的循环?
  3. 单行方法?

非常感谢您对此提供的任何帮助。

最佳答案

您可以使用反向正则表达式简化它,并将所有允许的字符替换为空字符串,这样输出将只剩下不允许的字符。

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/

相关文章:

java - 使用 Bean 对象中的 JSON 构造数组

java - 从特殊字符串包围的字符串中提取两个子字符串(Java)

javascript - 正则表达式:如何拆分和替换包含数字的字符串?

php - 使用 PHP 和 MySQL...如何释放内存?

r - 在 R 中使用复杂的调查设计提高查询速度

vb.net - 传递字符串时的 ByRef 与 ByVal 性能

javascript - 如何在javascript中访问另一个数组内的对象数组内的对象?

c# - 如何删除危险字符(即脚本标签)?

javascript - 如何使用 translate3d 和 javascript 限制水平滚动

regex - 如何删除一行中的单词到特定的字符模式...正则表达式