首先給一個神奇的圖:正則表達式
個人反應,精分吧!一下子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