收藏本站 收藏本站
積木網首頁 - 軟件測試 - 常用手冊 - 站長工具 - 技術社區
首頁 > 正則表達式 > 正文

首頁 - PHP - 數據庫 - 操作系統 - 游戲開發 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell編程 - DOS命令 - jQuery - CSS樣式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

詳談lastIndex對正則結果的影響

前言

今天遇到一個問題,用正則表達式去檢查同一個字符串時,交替返回true和false。無奈之下,重新翻了翻權威指南,發現罪魁禍首原來是lastIndex。可在控制臺嘗試下

let reg = /[d]/g
//undefined
reg.test(1)
//true
reg.test(1)
//false

lastIndex

lastIndex在權威指南中是如下解釋:它是一個可讀/寫的整數。如果匹配模式帶有g修飾符,這個屬性存儲在整個字符串中下次索引的開始位置,這個屬性會被exec()和test()用到。還是上面的例子,觀察下lastIndex屬性

let reg = /[d]/g  //有修飾符g
//undefined
reg.lastIndex
//0
reg.test(1)   
//true
reg.lastIndex  //匹配一次后,lastIndex改變
//1
reg.test(1)  //從index 1 開始匹配
//false
reg.lastIndex
//0
reg.test(1)
//true
reg.lastIndex
//1

第一次使用test()匹配成功后,lastIndex被設為匹配到的結束位置,就是1;第二次再test()時,從index 1 開始匹配,匹配失敗,lastIndex重置為0 。這樣就造成了匹配結果與預期不符

解決

1、不使用 g 修飾符

reg = /[d]/
///[d]/
reg.test(1)
//true
reg.test(1)
//true
reg.lastIndex
//0
reg.test(1)
//true
reg.lastIndex

2、test()之后手動設置lastIndex = 0

以上這篇詳談lastIndex對正則結果的影響就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持積木網。

正則表達式模式匹配字符串基礎知識
介紹在實際項目中有個功能的實現需要解析一些特定模式的字符串。而在已有的代碼庫中,在已實現的部分功能中,都是使用檢測特定的字符,使用這

python 正則表達式 re.sub & re.subn
python正則表達式模塊簡介Python自1.5版本起增加了re模塊,它提供Perl風格的正則表達式模式。Python1.5之前版本則是通過regex模塊提供Emacs風格的模式。Emacs

mysql update正則替換sql語句
下面的update語句執行的是把www.test.com中的test替換為abc程序代碼例句:UpdatetestSETurl=REPLACE('www.test.com','test','abc')WhereurlREGEXPwww.test.com;如果在記錄中,有類

本周排行

更新排行

強悍的草根IT技術社區,這里應該有您想要的! 友情鏈接:b2b電子商務
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP備05050695號
手游棋牌游戏运营
j江西时时 云南时时中奖规则 云南时时材 今天广东快乐十分钟 陕西省快乐十分开奖结果福彩 安徽时时是真的吗 甘肃快三开奖结果今天了 安徽时时单双怎么玩 云南快乐十分前三组的走势图 快乐12手机版 重时时开奖结果记录 河北快3开奖结果查询 广东时时十一选五结果 云发购快三 3d二码走势图 武汉十一选五的走势图