首先给一个神奇的图:正则表达式
个人反应,精分吧!一下子true一下子false的。。。post
后来发现,把g去掉后就正常了,那这是为何呢??lastIndex惹得鬼!性能
正文: lastIndex
全局正则表达是,有一个属性:lastIndex,这个属性是用来存放上一次匹配文本以后的第一个字符的位置。spa
exec()和test()方法,都是以lastIndex属性中存的位置,做为下次正则匹配检索的起点。这也就是为何会出现两次不同的结果了。code
解决办法:使用strin.search(reg)来替换test()了。对象
字面量 VS RegExp()
js建立正则有两种方法,一种直接字面量,另一种new RegExp()。blog
// 正则字面量 var pattern1 = /\d+/; // 构造 RegExp 实例,以字符串形式传入正则 var pattern2 = new RegExp('\\d+');
可是,须要注意的是,使用字面量方法,每次都会为其建立一个新的正则表达式对象。所以,要想提升性能,能够将正则先保存在一个变量中,而不是每次都写一遍:字符串
// 每次都会新建一个正则表达式对象
console.log(/abc/.test('a')); console.log(/abc/.test('ab')); console.log(/abc/.test('abc')); var pattern = /abc/; console.log(pattern.test('a')); console.log(pattern.test('ab')); console.log(pattern.test('abc'));
在循环中谨慎使用正则(详细请移步参考文章)
参考文章:https://juejin.im/post/5b4627a7f265da0f8759199bconsole