/*
* 貪婪模式就是在整個正則表達式匹配成功的前提下,儘可能多的去匹配
* + * ? {n,m} {n,} {m} [取最大匹配值的字符串]
*
* 懶惰模式就是在整個正則表達式匹配成功的前提下,儘可能少的去匹配
* +? *? ?? {n,m}? {n,}? {n}? [與上面相反]
*/
var str = "adcdefg123";
var reg = /[a-z]+/g;//使用貪婪模式進行匹配
console.log(str.replace(reg,"1"));//1123
var reg01 = /[a-z]+?/g;//使用懶惰模式進行匹配
console.log(str.replace(reg,"1"));//1dcdfeg123
//在懶惰模式下開啓全局,會進行多次匹配,的到的結果不一樣
var str01 = "8wwww8 8www8 8wwwwww8";
var reg02 = /w{3,6}/;//使用貪婪模式進行匹配
console.log(str01.replace(reg02,"a"));
var reg03 = /8w(.*)w8/;//啓用貪婪模式,儘可能多的去匹配除了換行以外的任意字符
console.log(str01);
console.log(str01.replace(reg03,"$1"));
//$1表示匹配上正則表達式第一組的內容
/*
* $0,$1,...$9是代表匹配正則的組
* ()起分組作用,將匹配到的結果放到一個集合中,¥相當於集合的名字,1-9就等於索引
* $1...$9對應響應的索引
*/
var reg04 = /w{3,}/g;
console.log(str01.replace(reg04,"a"));
var tel = "18710000000";
var reg05 = /(18)(\d)(\d{8})/;//匹配以18開頭的11位數字的字符串
console.log(tel.replace(reg05,"$3"));
if(RegExp.$2>5){
console.log("移動");
}else{
console.log("聯通");
}
/*
* \1匹配的是所獲取1個()匹配的引用,比如/(\d)\1/,匹配兩個連續的數字,如33aa中的33
* \2匹配的是所獲取2個()匹配的引用,比如/(\d)(a)\1/匹配死一個是數字第二個是字符a,然後\1
* 必須匹配第一個一樣的數字(重複的),引用一次,如1a1可以匹配,但是1a2匹配不上:
* 如果/\(\d)(a)\2/,匹配第一個是數字,第二個是a,第三個\2必須是第二個分組()
*/
var str04 = "3aaaa33aaaa";
var reg06 = /^(\d)(a)\2{3}/;//匹配以數字開頭,後面連續3次出現相同的數字
console.log(str03.match(reg06));
//search()方法用於檢測字符串中指定的子串,或者檢索於正則表達式相匹配的子串
var str05 = "Hello World";
console.log(str05.search("Hellos"));//找得到返回的子串首字母在字符串的下標,找不打返回-1
var reg07 = /l/ig;
console.log(str05.search(reg07));//search()方法不執行全局匹配,會忽略g標識符
正則的貪婪和懶惰
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.