js之正則的坑

首先給一個神奇的圖:正則表達式

個人反應,精分吧!一下子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

相關文章
相關標籤/搜索