当字符串包含特殊字符时,缓慢的正则表达式查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当字符串包含特殊字符时,缓慢的正则表达式查询相关的知识,希望对你有一定的参考价值。

我有一个正则表达式,如下所示/^(s*(*s*[0-9]*s*[+-*/]?s*[0-9]*s*)*s*)*$/,这不是完美的方法,但它可以快速检查输入的字符串是否是基本的数学公式,例如7 * 9 * (6 + 5)。我会进行第二次检查,是否可以通过它来查找未封闭的括号(该公式也可以以运算符结尾)。

[javascriptString.prototype.match能够使用正则表达式非常快速地匹配某些字符串,例如"7 * 912 + 6 + 7 +".match(regex)-但对于其他字符串却非常慢:]]

  1. "7 * 912 + 6 + $ +".match(regex)
  2. "7 * 912 + 6 + ^ +".match(regex)
  3. "7 * 912 + 6 + [ +".match(regex)
  4. "7 * 912 + 6 + ] +".match(regex)
  5. 但是,对于"7 * 912 + $ +".match(regex)来说速度很快

大概是因为该字符串包含特殊字符,并带有??在中间(如果我删除该问题,该问题将消失)-但仅当一定数量的运算符组合在一起时才出现?有没有办法改善这种性能?现在,我只是在检查任何特殊字符(因为无论如何都不允许),但是我想要一些更清洁的字符。

我有如下正则表达式/ ^( s * (* s * [0-9] * s * [+ -* /]? s * [0-9] * s * )* s *)* $ /并不完美,但是它可以快速检查输入的字符串是否是基本的数学公式,例如7 * 9 *(6 + ...

答案
检测格式正确的表达式非常复杂-我不会使用单个正则表达式来尝试整个操作-我会将您的多遍方法扩展到满足您的需求的水平。我肯定会从基本的字符过滤器开始:

以上是关于当字符串包含特殊字符时,缓慢的正则表达式查询的主要内容,如果未能解决你的问题,请参考以下文章

js 正则包含字符

正则表达式 - 在第一个和第三个字符之间插入一个特殊字符 (~),并且仅当存在完全匹配时

正则表达式包含所有特殊字符

正则校验字母数字特殊字符的函数

正则表达式必须包含字母数字和特殊字符

必须包含数字、字母、特殊字符三种的正则?