当字符串包含特殊字符时,缓慢的正则表达式查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当字符串包含特殊字符时,缓慢的正则表达式查询相关的知识,希望对你有一定的参考价值。
我有一个正则表达式,如下所示/^(s*(*s*[0-9]*s*[+-*/]?s*[0-9]*s*)*s*)*$/
,这不是完美的方法,但它可以快速检查输入的字符串是否是基本的数学公式,例如7 * 9 * (6 + 5)
。我会进行第二次检查,是否可以通过它来查找未封闭的括号(该公式也可以以运算符结尾)。
[javascript的String.prototype.match
能够使用正则表达式非常快速地匹配某些字符串,例如"7 * 912 + 6 + 7 +".match(regex)
-但对于其他字符串却非常慢:]]
"7 * 912 + 6 + $ +".match(regex)
"7 * 912 + 6 + ^ +".match(regex)
"7 * 912 + 6 + [ +".match(regex)
"7 * 912 + 6 + ] +".match(regex)
但是,对于"7 * 912 + $ +".match(regex)
来说速度很快
大概是因为该字符串包含特殊字符,并带有??在中间(如果我删除该问题,该问题将消失)-但仅当一定数量的运算符组合在一起时才出现?有没有办法改善这种性能?现在,我只是在检查任何特殊字符(因为无论如何都不允许),但是我想要一些更清洁的字符。
我有如下正则表达式/ ^( s * (* s * [0-9] * s * [+ -* /]? s * [0-9] * s * )* s *)* $ /并不完美,但是它可以快速检查输入的字符串是否是基本的数学公式,例如7 * 9 *(6 + ...
答案
检测格式正确的表达式非常复杂-我不会使用单个正则表达式来尝试整个操作-我会将您的多遍方法扩展到满足您的需求的水平。我肯定会从基本的字符过滤器开始:以上是关于当字符串包含特殊字符时,缓慢的正则表达式查询的主要内容,如果未能解决你的问题,请参考以下文章