正则表达式 - 测试或匹配

时间:2015-10-06 15:27:12

标签: javascript regex

这可能很挑剔,但我想知道使用正则表达式时最有效的工作流程是什么;我应该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;

另外,有没有办法可以引发异常?

2 个答案:

答案 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

结果如下:

enter image description here

enter image description here