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