首先給一個神奇的圖: 我的反應,精分吧!一會兒true一會兒false的。。。 後來發現,把g去掉後就正常了,那這是為什麼呢??lastIndex惹得鬼! 正文: lastIndex 全局正則表達是,有一個屬性:lastIndex,這個屬性是用來存放上一次匹配文本之後的第一個字元的位置。 exec( ...
首先給一個神奇的圖:
我的反應,精分吧!一會兒true一會兒false的。。。
後來發現,把g去掉後就正常了,那這是為什麼呢??lastIndex惹得鬼!
正文: lastIndex
全局正則表達是,有一個屬性:lastIndex,這個屬性是用來存放上一次匹配文本之後的第一個字元的位置。
exec()和test()方法,都是以lastIndex屬性中存的位置,作為下次正則匹配檢索的起點。這也就是為什麼會出現兩次不一樣的結果了。
解決辦法:使用strin.search(reg)來替換test()了。
字面量 VS RegExp()
js創建正則有兩種方法,一種直接字面量,另外一種new RegExp()。
// 正則字面量 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/5b4627a7f265da0f8759199b