正则浅学

来源:互联网 发布:淘宝服装照片拍摄方法 编辑:程序博客网 时间:2024/05/17 09:35
<!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8">    <title>正则表达式小结</title></head><body><script>    //两种方法实例化regexp对象    // 1、字面量    // 2、构造函数// 1、字面量var regb = /\bis\b/var regbg = /\bis\b/g;   //\b表示单词边界、g全局匹配、i忽略大小写var regbgi = /\bis\b/gi; //i忽略大小写var string1 = "He is a boy.This is a dog.Where is she?"var string2 = "He is a boy.Is he?"console.log(string1.replace(regb,"X"));console.log(string1.replace(regbg,"X"));console.log(string2.replace(regbgi,"X"));// 2、构造函数var regg = new RegExp("\\bis\\b");var reggg = new RegExp("\\bis\\b","g");var string3 = "He is a boy.This is a dog.Where is she?"console.log(string3.replace(regg,"X"));console.log(string3.replace(reggg,"X"));//3、元字符// --原义文本字符   \b// --元字符         *+?$^./\(){}[]     //4、字符类 ---通过元字符[]构建一个简单的类匹配某一类字符(并不是匹配某一个)console.log("a1b2c3d4".replace(/[abc]/g,"X"));//取反--使用元字符^创建反向类console.log("a1b2c3d4".replace(/[^abc]/g,"X"));//5、范围类//可以使用[a-z]来匹配从a到z的任意字符console.log("a1b2c3x4z9".replace(/[a-z]/g,"Q"));console.log("a1b2c3x4z9AFSDF".replace(/[a-zA-Z]/g,"Q"));console.log("2017-03-21".replace(/[0-9]/g,"Q"));console.log("2017-03-21".replace(/[0-9-]/g,"Q"));//预定义类  匹配常见的字符类//  .    [^\r\n]  除了回车符和换行符之外的所有字符//  \d   [0-9]  数字字符// \D  非数字字符   大写的都表示取反//   ab\d.//边界  \b  \B// ^  在[]以内的时候,表示取反;不在[]以内表示  以xxx开始;$表示以xxx结束console.log("@123@abc@".replace(/@./g,"Q"));console.log("@123@abc@".replace(/^@./g,"Q"));console.log("@123@abc@".replace(/.@/g,"Q"));console.log("@123@abc@".replace(/.@$/g,"Q"));//m多行匹配var mulSrt = "@123\t@456\t@789"; // \b在这里给字符串换行了console.log(mulSrt.replace(/^@\d/g,"X"));console.log(mulSrt.replace(/^@\d/gm,"X"));  //m//量词// ?  0/1次// +  1/n次// *  0/n次// {n}  n次// {n,m}  n~m次// {n,}   n~至少//贪婪模式&非贪婪模式console.log("12345678".replace(/\d{3,6}/g,"Q"));//默认的贪婪模式console.log("12345678".replace(/\d{3,6}?/g,"Q"));  //贪婪模式。在量词后加上?;让正则表达式尽可能少的匹配。一旦成功匹配就不再尝试//分组----()console.log("a1b2c3d4".replace(/[a-z]\d{3}/g,"X"));console.log("a1b2c3d4".replace(/([a-z]\d){3}/g,"X"));//或//反向引用console.log("2017-03-21".replace(/\d{4}-\d{2}-\d{2}/g,"$1"));console.log("2017-03-21".replace(/(\d{4})-(\d{2})-(\d{2})/g,"$2/$3/$1"));  //分组捕获,相当于提取变量console.log("Hello-World".replace(/(\w{5})-(\w{5})/g,"$2-$1"));//忽略分组console.log("2017-03-21".replace(/(?:\d{4})-(\d{2})-(\d{2})/g,"$2/$3/$1"));   //忽略分组。在分组内加上?:即可。年份忽略分组之后,月份变为$1,日为$2,所以应该写为console.log("2017-03-21".replace(/(?:\d{4})-(\d{2})-(\d{2})/g,"$1/$2/$3"));//前瞻--正则表达式从文本头部向尾部开始解析,文本尾部方向,称为“前”//在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾则方向相反 js不支持后顾console.log("a2*3".replace(/\w(?=\d)/g,"X"));console.log("a2*34v8".replace(/\w(?=\d)/g,"X"));//js对象属性//test     RegExp.prototype.test(string);    用来测试var reg1 = /\w/;var reg2 = /\w/g;while(reg2.test("ab")){    console.log(reg2.lastIndex); //1  2   lastIndex:当前【匹配结果】的【最后一个字符】的【下一个】字符;}//exec()   RegExp.prototype.exec(string)//String.protatype.search(reg)//String.protatype.match(reg)  除了常规的数组元素之外,返回的数组还有两个对象元素。//index声明匹配文本的起始字符;//input 声明对stringObject的引用;var reg3 = /\d(\w)\d/;var reg4 = /\d(\w)\d/g;var ts = "#1a2b3c4d5e";var ret = ts.match(reg3);console.log(ret);console.log(ret.index + "\t" +reg3.lastIndex);var ret1 = ts.match(reg4);console.log(ret1);console.log(ret1.index + "\t" +reg4.lastIndex);//String.protatype.split(reg)//String.protatype.replace(str,replaceString)//String.protatype.replace(reg,replaceString)//String.protatype.replace(reg,function)//function 会在每次匹配替换的时候调用,包含四个参数:1、匹配字符串;2、正则表达式分组内容,没有分组就没有参数;3、匹配项在字符串中的index;4、原字符串"a1b2c3d4e5".replace(/\d/g,function(match,index,origin){    // console.log(match);    console.log(index);    return parseInt(match)+1;})"a1b2c3d4e5".replace(/(\d)(\w)(\d)/g,function(match,group1,group2,group3,index,origin){    console.log(match);    return group1 + group3;})</script></body></html>


原创粉丝点击