首頁 >web前端 >js教程 >JS正規表示式修飾符global(/g)用法分析

JS正規表示式修飾符global(/g)用法分析

高洛峰
高洛峰原創
2017-01-09 15:35:031499瀏覽

本文實例講述了JS正規表示式修飾符global(/g)用法。分享給大家供大家參考,具體如下:

/g修飾符代表全局匹配,查找所有匹配而非在找到第一個匹配後停止。先看一段經典程式碼:

var str = "123#abc";
var noglobal = /abc/i;//非全局匹配模式
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
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

   

可以看到:當使用/g模式的時候,多次執行RegExp.test()的輸出結果會有差異。

 在創建正規表示式物件時如果使用了「g」標識符或設定它了的?global屬性值為ture時,那麼新建立的正規表示式物件將使用模式對要將要匹配的字串進行全局匹配。在全域匹配模式下可以對指定要尋找的字串執行多次匹配。每次符合使用目前正規物件的lastIndex屬性的值作為在目標字串中開 始查找的起始位置。 lastIndex屬性的初始值為0,找到符合的項目後lastIndex的值被重設為符合內容的下一個字元在字串中的位置索引,用來識別下次執行比對時開始尋找的位置。如果找不到符合的項lastIndex的值會被設定為0。當沒有設定正規物件的全域匹配標誌時lastIndex屬性的值始終為0,每次執行符合僅查找字串中第一個符合的項。

可以透過下面這段程式碼驗證lastIndex在/g模式下的表現:

var str = "012345678901234567890123456789";
var re = /123/g;
console.log(re.lastIndex); //输出0,正则表达式刚开始创建
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出4
console.log(re.test(str)); //输出true
console.log(re.lastIndex); //输出14
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出24
console.log(re.test(str)); //输出false
console.log(re.lastIndex); //输出0,没有找到匹配项被重置

上面我們看到了/g模式對於RegExp.test()函數的影響,現在我們看下對RegExp.exec()函數的影響。 RegExp.exec()傳回一個數組,其中存放匹配的結果。如果未找到匹配,則傳回值為 null。

var str = "012345678901234567890123456789";
var re = /abc/;
//exec没有找到匹配
console.log(re.exec(str));//null
console.log(re.lastIndex);//0
var str = "012345678901234567890123456789";
var re = /123/;
var resultArray = re.exec(str);
console.log(resultArray[0]);//匹配结果123
console.log(resultArray.input);//目标字符串str
console.log(resultArray.index);//匹配结果在原始字符串str中的索引

   

對於RegExp.exec方法,不加入g,則只返回第一個匹配,無論執行多少次均是如此;如果加入g,則第一次執行也返回第一個匹配,再返回第一個匹配,無論執行多少次均是如此;如果加入g,則第一次執行也返回第一個匹配,再返回執行返回第二個匹配,依次類推。

var str = "012345678901234567890123456789";
var re = /123/;
var globalre = /123/g;
//非全局匹配
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
//全局匹配
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出4
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出11
console.log(globalre.lastIndex);//输出14

   

當使用/g配對模式的時候,我們可以透過循環,取得所有的符合項目。

var str = "012345678901234567890123456789";
var globalre = /123/g;
//循环遍历,获取所有匹配
var result = null;
while ((result = globalre.exec(str)) != null)
{
 console.log(result[0]);
 console.log(globalre.lastIndex);
}

   

希望本文所述對大家JavaScript程式設計有所幫助。

更多JS正規表示式修飾符global(/g)用法分析相關文章請關注PHP中文網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn