//例子一
console.log(/\d{4}/.global)//false
console.log(/\d{4}/g.global)//true
console.log(/\d{4}/.ignoreCase)//false
console.log(/\d{4}/i.ignoreCase)//true
var reg = /\d{4}/g
var str='2018ceshi2019'
console.log(reg.test('2018ceshi2019'),reg.lastIndex)//true 4
console.log(reg.test('2018ceshi2019'),reg.lastIndex)//true 13
console.log(reg.test('2018ceshi2019'),reg.lastIndex)//false 0
console.log(/\d{4}/.multiline)//false
console.log(/\d{4}/m.multiline)//true
console.log(/\d{4}/.source)//\d{4}
var mutiline = /^abc/m;
var singleline = /^abc/;
var target = "ef\r\nabcd";
console.log(mutiline.test(target));//true
console.log(singleline.test(target));//false
//例子二
var reg = /\d{4}/g
console.log(reg.test('2018ceshi2019'),reg.lastIndex)//true 4
console.log(reg.test('2018ceshi2019'),reg.lastIndex)//true 13
console.log(reg.test('2018ceshi2019'),reg.lastIndex)//false 0
console.log(reg.test('2018ceshi2019'),reg.lastIndex)//true 4
console.log(reg.test('2018ceshi2019'),reg.lastIndex)//true 13
console.log(reg.test('2018ceshi2019'),reg.lastIndex)//false 0
//例子三
var str = "2018ceshi2019"
//使用非全局匹配
console.log(/\d\w/.exec(str));//["20", index: 0, input: "2018ceshi2019"]
console.log(/([a-z])(\w)/.exec(str));//["ce", "c", "e", index: 4, input: "2018ceshi2019"]
//使用全局匹配
var regg=/\d\w/g
console.log(regg.exec(str));//["20", index: 0, input: "2018ceshi2019"]
console.log(regg.exec(str));//["18", index: 2, input: "2018ceshi2019"]
console.log(regg.exec(str));//["20", index: 9, input: "2018ceshi2019"]
console.log(regg.exec(str));//["19", index: 11, input: "2018ceshi2019"]
console.log(regg.exec(str));//null
console.log(regg.exec(str));//["20", index: 0, input: "2018ceshi2019"]
var regg2=/([a-z])(\w)/g
console.log(regg2.exec(str));//["ce", "c", "e", index: 4, input: "2018ceshi2019"]
exec适合用于循环匹配,虽然全局匹配和非全局的返回值一样,但使用exec循环时,必须要加修饰符g
//例子四
var str='abc,bbc,cbc,dbc';
var reg=/(\w)bc/g;
//循环匹配时,要先将正则表达式定义好,不然每次都是一个新的正则对象,影响lastIndex的变化
//一定要加修饰符g,lastIndex是匹配项后面的下标,是下一次匹配的开始下标
//当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0
//exec()方法使用循环
var resultArr=[];
while(result=reg.exec(str)){
console.log("lastIndex: "+reg.lastIndex);
//lastIndex: 3
//lastIndex: 7
//lastIndex: 11
//lastIndex: 15
resultArr.push(result);
}
console.log(JSON.stringify(resultArr));//[["abc","a"],["bbc","b"],["cbc","c"],["dbc","d"]]
//test()方法使用循环
resultArr=[]
while(result=reg.test(str)){
console.log("lastIndex: "+reg.lastIndex);
//lastIndex: 3
//lastIndex: 7
//lastIndex: 11
//lastIndex: 15
resultArr.push(result);
}
console.log(JSON.stringify(resultArr));//[true,true,true,true]
//例子五
var str = "jfkdasjf"
var reg=/a/g
console.log(str.search(reg));//4
console.log(str.search(/z/));//-1
//例子六
var str = "jfkdasjf"
var reg = /a/g;
console.log(str.replace(reg,"被替换了"))
//例子七
var str = "1a2b3c";
//1使用的是非全局匹配,匹配到的是结果是数组,数组成员是[匹配到的字符,匹配到的字符的index,被匹配的字符串]
var reg = /[\d.]/;
console.log(str.match(reg)); //["1",groups:undefined,index:0,input:"1a2b3c"]
console.log(JSON.stringify(str.match(reg))); //'["1"]'
//2使用的是全局匹配,匹配到的结果是数组,数组的成员是[匹配到的字符串,...]
var reg2 = /\d./g;
console.log(str.match(reg2)); //["1a","2b","3c"]
console.log(JSON.stringify(str.match(reg2))); //'["1a","2b","3c"]'
//3如果使用的是全局匹配,且匹配到的结果只有一个,返回的也是和上面的2一样的
console.log('1asdf'.match(reg2)); //["1a"]
console.log(JSON.stringify('ab2c'..match(reg2))); //'["1a"]'
//例子八
var str = "my@name#is&zhou&zhou"
//能匹配到
console.log(str.split(/@|#|&/g))//["my", "name", "is", "zhou", "zhou"]
//不能匹配到
console.log(str.split(/~/g))//["my@name#is&zhou&zhou"]
正则的test和exec方法与字符串的search,replace,match,split方法的使用
原文:https://www.cnblogs.com/HYZhou2018/p/10650523.html