一个典型的应用需要处理大量的类似合并,分割,重新排序,搜索,遍历等字符串操作。
不需要使用正则表达式的情况
1 .所有字符串方法都很快,有原生方法的时候一定要用这方法
2 .根据需要检测的特性,还可以用原生方法结合正则来实现,远比只使用正则速度快
字符串连接
1 .+,+=(当前最快),join(ie7之前最快),concat(最慢)
正则表达式的优化
正则表达式的工作原理
1 .编译:当创建一个正则表达式的时候,浏览器验证你的模式,然后把它转成一个原生代码程序,用于执行匹配工作。如果把正则对象赋值给一个变量,就能避免重复执行这个步骤
2 .设置起始位置:当正则进入使用状态的时候,首先要确定的是目标字符串的起始位置,或者由正则表达式的lastIndex确定,但是当他从第四步返回的时候,此位置则在最后一次匹配的起始位置的下一字符的位置上。
3 .一旦正则表达式知道开始的位置后,会逐个检查文本和正则表达式模式。当一个特定的字元匹配失败时,正则表达式会试着回溯到之前尝试匹配的位置上,然后尝试其他可能的路径。
4 .匹配成功或失败:如果在字符串当前位置发现了一个完全匹配,那么正则表达式宣布成功,如果正则表达式所有可能路径都没有找到匹配,正则表达式就会退回第二步,然后从下一个字符重新尝试,只有当字符串的每一个字符都经历过这个过程之后,还没有匹配成功,那么正则表达式就宣布彻底匹配失败
回溯
1 .当正则表达式导致你的浏览器假死数秒甚至更长的时间,问题很可能是因为回溯时空。
提高正则表达式的效率
1 .关注如何让匹配更快失败:在一个匹配过程中,失败的地方远远比成功的地方多
2 .正则表达式以简单,必须的子元开始:最理想的情况是一个正则表达式的起始标注应当尽可能以快速测试并排除那些明显不匹配的位置。通常是一个($,^)或者特定的字符串,字符类,单词边界。这样可以更好的优化
3 .使用量词,让后面的子元互斥:
4 .减少分支:缩小分支范围
5 .使用非捕获组
6 .将复杂的正则表达式拆解为简单的片段