javascript正则表达式使用reg.test()时慎用全局查找/.../g属性
先看一道JavaScript題目,據(jù)說是國(guó)內(nèi)某知名互聯(lián)網(wǎng)企業(yè)的JavaScript筆試題,如果對(duì)正則的全局匹配模式不了解的話可能會(huì)對(duì)下面的輸出結(jié)果感到疑惑。
[php]
var str = "123#abc";
var re = /abc/ig;
console.log(re.test(str)); //輸出ture
console.log(re.test(str)); //輸出false
console.log(re.test(str)); //輸出ture
console.log(re.test(str)); //輸出false
[/php]
在創(chuàng)建正則表達(dá)式對(duì)象時(shí)如果使用了“g”標(biāo)識(shí)符或者設(shè)置它了的?global屬性值為ture時(shí),那么新創(chuàng)建的正則表達(dá)式對(duì)象將使用模式對(duì)要將要匹配的字 符串進(jìn)行全局匹配。在全局匹配模式下可以對(duì)指定要查找的字符串執(zhí)行多次匹配。每次匹配使用當(dāng)前正則對(duì)象的lastIndex屬性的值作為在目標(biāo)字符串中開 始查找的起始位置。lastIndex屬性的初始值為0,找到匹配的項(xiàng)后lastIndex的值被重置為匹配內(nèi)容的下一個(gè)字符在字符串中的位置索引,用來 標(biāo)識(shí)下次執(zhí)行匹配時(shí)開始查找的位置。如果找不到匹配的項(xiàng)lastIndex的值會(huì)被設(shè)置為0。當(dāng)沒有設(shè)置正則對(duì)象的全局匹配標(biāo)志時(shí)lastIndex屬性的值始終為0,每次執(zhí)行匹配僅查找字符串中第一個(gè)匹配的項(xiàng)。可以通下面的代碼來查看在執(zhí)行匹配相應(yīng)的lastIndex 屬性的值。
[php]
var str = "123#abc";
var re = /abc/ig;
console.log(re.test(str)); //輸出ture
console.log(re.lastIndex); //輸出7
console.log(re.test(str)); //輸出false
console.log(re.lastIndex); //輸出0
console.log(re.test(str)); //輸出ture
console.log(re.lastIndex); //輸出7
console.log(re.test(str)); //輸出false
console.log(re.lastIndex); //輸出0
[/php]
這個(gè)時(shí)候可以在其中添加一條語句, 人工將位置歸零, 防止這個(gè) "錯(cuò)誤" 的發(fā)生:
[php]
var re = /^\w$/g;
re.test('a'); //返回true
re.lastIndex = 0; //歸零搜索的位置
re.test('b'); //返回true
[/php]
或者我們可以更簡(jiǎn)單地直接將g去掉:
[php]
var re = /^\w$/;
re.test('a'); //返回true
re.test('b'); //返回true
[/php]
轉(zhuǎn)自:https://blog.csdn.net/leolu007/article/details/8576490
總結(jié)
以上是生活随笔為你收集整理的javascript正则表达式使用reg.test()时慎用全局查找/.../g属性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: freeCodeCamp:Where a
- 下一篇: 「工具推荐」小众又实用的五款效率工具