正则的贪婪和懒惰

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