好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 淺析正則表達式中的lastIndex以及預查

淺析正則表達式中的lastIndex以及預查

熱門標簽:西藏智能外呼系統(tǒng)代理商 梅縣地圖標注 ai電話機器人搭建 甘肅醫(yī)療外呼系統(tǒng)排名 貴港公司如何申請400電話 地圖標注教學點 外呼系統(tǒng)無呼出路由是什么原因 呼叫系統(tǒng)外呼只能兩次 400電話辦理電話辦理

依次寫出下列輸出內(nèi)容。

var reg1 = /a/;
var reg2 = /a/g;
console.log(reg1.test('abcabc')); // true
console.log(reg1.test('abcabc')); // true
console.log(reg1.test('abcabc')); // true
console.log(reg1.test('abcabc')); // true
console.log(reg2.test('abcabc')); // true
console.log(reg2.test('abcabc')); // true
console.log(reg2.test('abcabc')); // false
console.log(reg2.test('abcabc')); // true

很簡單的一個正則表達式測試,查找字符串a(chǎn)bcabc中是否有字符a。但是結果卻有一個特殊false存在,Why?

lastIndex(針對于帶參數(shù)g的正則表達式)

在每個實例化的RegExp對象中,都存在一個lastIndex屬性,其初始值為0。

/a/.lastIndex // 0
new RegExp('a').lastIndex // 0
lastIndex表示匹配成功時候,匹配內(nèi)容最后一個字符所在原字符串中的位置 + 1,也就是匹配內(nèi)容的下一個字符的index(如果匹配內(nèi)容在字符串的結尾,同樣返回原字符串中的位置 + 1,也就是字符串的length)。如果未帶參數(shù)g,lastIndex始終為0。
var reg = /ab/g;
reg.test('123abc');
console.log(reg.lastIndex) // 5
// 匹配內(nèi)容在最后
var reg = /ab/g;
reg.test('123ab');
console.log(reg.lastIndex) // 5
// 不帶參數(shù)g
var reg = /ab/;
reg.test('123abc');
console.log(reg.lastIndex) // 0

而這個lastIndex也就是用該正則進行其他匹配操作的時候匹配開始的位置。而匹配失敗時重置lastIndex為0。

var reg = /ab/g;
// 初始值為0,從最開始匹配 匹配成功, lastIndex為4
console.log(reg.test('12ab34ab'), reg.lastIndex); // true 4
// 從第4位字符"3"開始匹配 匹配內(nèi)容為第二個ab lastIndex 為 8
console.log(reg.test('12ab34ab'), reg.lastIndex); // true 8
// 從第8位 (字符長度為8,沒有第8位) 開始匹配 匹配不成功 重置lastIndex 為 0
console.log(reg.test('12ab34ab'), reg.lastIndex); // false 0
// 從頭匹配 同第一步
console.log(reg.test('12ab34ab'), reg.lastIndex); // true 4

看到這里題目也就解答完畢,接下來是擴展。

對于未重新聲明的reg容易犯錯的地方。

// 測試字符串str1 和 str2 是否都含有ab字符
var reg = /ab/g;
var str1 = '123ab';
var str2 = 'ab123';
console.log(reg.test(str1)); // true
console.log(reg.test(str2)); // false

很明顯這里因為lastIndex的原因導致判斷錯誤。這里可以修改reg不帶參數(shù)g或則重新聲明reg,當然也可以在第一次匹配后手動修改reg.lastIndex = 0。

預查

接著說預查,字面意思就是預備匹配查詢,也就是查詢匹配內(nèi)容接下來的內(nèi)容,但是只是預備查詢匹配,并不返回。

經(jīng)常我們需要匹配到字符串中某些字符后面跟某些字符,但是我們不需要匹配結果中包含后面跟的字符,例如:

找出下面字符串中字符后面是2的所有字符。

var str = 'a1b2c22d31e4fg6h2';
'a1b2c22d31e4fg6h2'.match(/[a-z]2/g); // ["b2", "c2", "h2"]

這樣,雖然能匹配出字符串帶2的,但是數(shù)字2我們并不需要,這里只需要字符。而用預查:

'a1b2c22d31e4fg6h2'.match(/[a-z](?=2)/g); // ["b", "c", "h"]

可以看到完全滿足條件,但是預查和本文的主題lastIndex又有幾毛錢的關系呢?

我們用test來看看,至于為什么用test這里要說明一下,match是匹配所有,直到匹配不成功的時候結束匹配,而匹配不成功時,lastIndex就被重置為0了。

而exec和test是第一次匹配成功或者匹配失敗就返回,并不會接著往下匹配。

var reg1 = /[a-z](?=2)/g;
var reg2 = /[a-z]2/g;
var str = 'a1b2c22d31e4fg6h2';
console.log(reg1.test(str), reg1.lastIndex); // true 3
console.log(reg1.test(str), reg1.lastIndex); // true 5
console.log(reg1.test(str), reg1.lastIndex); // true 16
console.log(reg1.test(str), reg1.lastIndex); // false 0
console.log(reg2.test(str), reg2.lastIndex); // true 4
console.log(reg2.test(str), reg2.lastIndex); // true 6
console.log(reg2.test(str), reg2.lastIndex); // true 17
console.log(reg2.test(str), reg2.lastIndex); // false 0

看出問題沒有?預查的lastIndex不包含預查內(nèi)容! 這里就可以用來簡化很多判斷了。

例如我們要匹配密碼必須有至少一個大寫字母,一個小寫字母,一個數(shù)字,并且長度至少6位而且只能是數(shù)字字母組合。

按照不會預查的情況會這樣去判斷:

/[a-z]/.test(pwd)  /[A-Z]/.test(pwd)  /\d/.test(pwd)  /^[a-zA-Z0-9]{6,}$/.test(pwd);

但是:

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z0-9]{6,}$/.test(pwd)

分解出來看:

(?=.*[a-z]) 是否有小寫字母 但是是預查 匹配失敗返回false 成功lastIndex不變動,還是為0,同理理解兩外預查內(nèi)容,最后就是6喂以上的字母數(shù)字組合匹配,但是前面都是預查,lastIndex始終未0,每次匹配都是從最開始匹配的,所以滿足要求。

以上所述是小編給大家介紹的淺析正則表達式中的lastIndex以及預查,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • JS中正則表達式要注意lastIndex屬性
  • js正則表達式之RegExp對象屬性lastIndex,lastMatch,lastParen,lastContext,rightContext屬性講解
  • Javascript lastIndex 正則表達式的一個疑惑
  • 淺析lastIndex對正則表達式結果的影響

標簽:湖州 泰安 常州 海口 大興安嶺 本溪 哈密 涼山

巨人網(wǎng)絡通訊聲明:本文標題《淺析正則表達式中的lastIndex以及預查》,本文關鍵詞  淺析,正則,表達式,中的,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺析正則表達式中的lastIndex以及預查》相關的同類信息!
  • 本頁收集關于淺析正則表達式中的lastIndex以及預查的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产91人妻精品一区二区| 罚跪晾臀闺房调教打屁股| 99精产国品一二三产区区别麻豆| 王霞的婬乱生活第二部更新时间| 边摸边吃奶边叫床| 宝贝好爽好硬…好紧还要| 爷俩共用一个女人的小说| 成人做爰黄?片免费观看软| 男女靠逼免费视频| 中国女人内射6XXXXX| 好紧好爽搔浪我还要视频| 国产精品vⅰdeoXXXX国产| 天堂WWW在线无码免费| 香蕉视频啪啪| 厨房playh| 暖床糙汉H1VL1| 把她日出水了好紧大爽了视频| 中国女人内谢69ⅩXXX麻豆| 午夜老湿影院| 五十路美熟h0930| 色哟哟一区二区三区四区在线看| 日本一区二三区好的精华液| 男人把j弄进女人的嘴| 日韩成人一区二区三区在线观看| 大尺度电影大全在线播放| 李丽莎销魂一区二区三区| 亚洲乱亚洲23p女| 男男小说高h| 久久久久久久久国产| 国产美女裸露无遮挡双奶A片视频 中文字幕无码一区二区三区免费 国产伦一区二区三区高清 | 被陌生人拉到公车后面爽| 亚洲精品一区二区三| 国产精品打着电话偷着情| 日本a∨网站| 美女的隐私视频网站app| 大坑上的偷乱2| 好大?用力?深一点高潮A片| 无遮挡亲胸捏胸激吻视频| 最新97超级碰碰碰碰久久久久| 91午夜影院| 秘?韩H漫画网站入口|