正則的貪婪和懶惰

		/*
		 * 貪婪模式就是在整個正則表達式匹配成功的前提下,儘可能多的去匹配
		 * + * ? {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標識符
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章