这可能很挑剔,但我想知道使用正则表达式时最有效的工作流程是什么;我应该test
使用exec
,还是只使用exec
?
示例:我有一个正则表达式,用于删除最后一个字符(\W
)之后的所有非单词(\w
)。
E.g。
var str = 'Example string with _some weird formatting at the end *_&^',
reg = /(.*\w)/;
效率更高:
if (reg.test(str)) {
str = reg.exec(str)[0];
}
VS
var res = reg.exec(str);
str = (res && res[0]) || str;
另外,有没有办法可以引发异常?
答案 0 :(得分:2)
底线: 正常表达式与大多数方法相比都很昂贵。
reg.test()
和reg.exec()
会针对目标str
运行表达式,因此它比运行reg.exec()
更昂贵。
但是,如果您尝试替换数据,则可以使用str.replace()
:
str = str.replace(/\W+$/, '');
这不仅速度快(只评估了一个表达式),而且还很实用。没有比务实的解决方案好多了!
注意:如有疑问,test!
答案 1 :(得分:1)
您可以使用名为jsperf.com的非常有用的站点来比较您的不同测试用例性能。
您可以在此处查看两个代码之间的基准比较:
<强> test with exec VS exec-only 强>
结果如下: