V8会自动缓存编译好的正则表达式吗?
Does V8 cache compiled regular expressions automatically?
所以我知道,在Javascript实例化一个正则表达式导致它被自动编译,如果正则表达式存储在一个变量中,它将被重用而无需重新编译。例子:
var re = /[Ff]oo|[Bb]ar/;
"Foo".match(re); // ["Foo"]
"Baz".match(re); // null
然而,重复正则表达式重新编译或V8 (Chrome/Node.js)智能地重用它们(如PHP与preg_*函数)?
function isFooBar(str) {
return str.match(/[Ff]oo|[Bb]ar/);
}
isFooBar("Foo"); // ["Foo"]
isFooBar("Baz"); // null
所以为了澄清,我知道第一个例子导致了一个正则表达式的编译。那么第二个例子呢?
好吧,我们来看看。
// http://stackoverflow.com/questions/3466850/complex-password-regular-expression
function isFooBar(str) {
return str.match(/^(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*['d'W])|(?=.*'W)(?=.*'d))|(?=.*'W)(?=.*[A-Z])(?=.*'d)).{8,}(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*'d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*'d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?$/);
}
console.time('1');isFooBar("Foo");console.timeEnd('1');
console.time('2');isFooBar("Bar");console.timeEnd('2');
(打开控制台并运行上面的代码片段,看看结果是否适合您的浏览器。)
在Node.js 0.10.36 (V8 3.14.5.9):
1: 65ms
2: 0ms
在io.js 1.6.3 (V8 4.1.0.27)上:
1: 32ms
2: 0ms
所以,我猜你的问题的答案是是的, V8能够自动缓存正则表达式。
编辑:
即使V8 能够进行这种优化,它实际上可能不会总是选择使用这种优化。V8针对不同的情况有许多复杂的启发式方法,比如何时内联函数,何时优化函数,何时反优化函数,等等。除非你是一名V8开发人员,否则这些启发式方法中的许多可能看起来很奇怪或出乎意料,或者两者兼而有之。
我自己不是V8开发人员,我不知道具体问题的答案,也不知道正则表达式是否总是自动缓存。然而,即使我知道答案,将来也可能会改变。因此,当您编写代码时,我仍然建议以这样一种方式存储正则表达式,即清楚该变量的意图是什么。对于上面的示例,这意味着将regex变量从函数isFooBar()
中取出。
另一个问题是如何创建这个正则表达式。上面的例子和OP的问题都是用正则表达式literal声明的。但是,如果您使用的是new RegExp()
构造函数,V8 将不允许缓存正则表达式,因为它可能在运行时更改。
http://code.google.com/p/v8/issues/detail?id=933#c3
在Chrome 9中,我们已经删除了RegExp结果的基本缓存。这意味着我们不再需要花费不切实际的低时间来一次又一次地对相同的输入重复相同的操作。最初,添加缓存是为了指出过于简单(当时包括我们自己的)的基准测试太容易通过添加这样的缓存来"游戏"(这在实际场景中没有什么区别)。此后,大多数基准测试都有了很大的改进,因此我们决定删除缓存(及其不可避免的开销)。该缓存在v8版本4083 (Chrome 5发布)中添加,并在版本5755(将在Chrome 9中)中删除
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在 Node.js 中编译正则表达式规则
- 为谷歌代码prettify编译正则表达式
- 与toString方法相比,使用正则表达式在javascript中进行函数反编译的优势
- V8会自动缓存编译好的正则表达式吗?