【发布时间】:2015-02-17 16:50:17
【问题描述】:
我正在寻找这个question 的答案,并且我在这样的响应之间进行了一些性能测试:
console.time("first_test");
for( i=0;i<10000;i++)
result=function1(str);
console.log(result);
console.timeEnd("first_test");
console.time("second_test");
for( i=0;i<10000;i++)
result=function2(str);
console.log(result);
console.timeEnd("second_test");
this gives:
first_test: 232ms
second_test: 21ms
And if I reverse the order of the tests:
second_test: 128ms
first_test: 102ms
函数和正则表达式几乎相同,但即使我更改了传入参数的字符串,第二个函数的执行速度总是比第一个函数快。
所以我一开始想知道第一个函数如何加快第二个函数的速度,以及更笼统地说正则表达式是如何被缓存的。
function function1(str){
return str.replace(/(_)|(\'\W|\'$)|(^\'|\W\')|(\+\+)|([a-zA-Z0-9\ \&\-\.\!\'])|(.)/g,function(car,p1,p2,p3,p4,p5,p6,offset){
if(p1) return " ";
if(p2) return sanitize(p2.slice(1));
if(p3) return sanitize(p3.slice(0,-1));
if(p4) return p4.slice(0,p4.length-p4.length%2);
if(p5) return car;
if(p6) return "";
});
}
function function2(str){
return str.replace(/(_)|(\++)|([a-zA-Z0-9\ \&\-\.\!])|(\'\W|\'$)|(^\'|\W\')|(\W)/g,function(car,p1,p2,p3,p4,p5,p6){
if(p1) return " ";
if(p2) return p2.slice(0,p2.length-p2.length%2);
if(p3) return car;
if(p4) return p4.slice(1);
if(p5) return p5.slice(0,-1);
if(p6) return "";
});
}
【问题讨论】:
-
那么
function1和function2在哪里?! -
我已经添加了功能
标签: javascript regex node.js performance