正则表达式

正则表达式

  • 创建方式
    • 字面量 var reg = /abc/
    • 构造方法 var reg = new RegExp('abc','igm')
    	var reg = /abc/m;
    	var reg1 = new RegExp(reg)
    	reg.abc = 123;
    	console.log(reg1.abc)//undefined
    
    	var reg = /abc/m;
    	var reg1 = RegExp(reg)
    	reg.abc = 123;
    	console.log(reg1.abc)//123
    
  • 修饰符
    • i 忽略大小写
    • g 全局匹配
    • m 执行多行匹配
    	// [A-z_] 匹配范围
    	// (abc|abd) 或
    	
       var reg = /a/g;
       var str = "abcdea";
       console.log(str.match(reg));//["a","a"]
    
       var reg = /^a/g;
       var str = "abcdea";
       console.log(str.match(reg));//["a"]
    
       var reg = /^a/g;
       var str = "abcde\na";
       console.log(str.match(reg));//["a"]
    
       var reg = /^a/gm;
       var str = "abcde\na";
       console.log(str.match(reg));//["a","a"]
    
  • 元字符
    • . [^\r\n]
    • \w [0-9A-z_]
    • \W [^\w]
    • \d [0-9]
    • \D [^\d]
    • \s [\n\f\r\t\v ] 空白字符
    • \S [^\s]
    • \b 单词边界
    • \B 非单词边界
    var reg = /\ba/g;
    var str = "abc dad cea";
    str.match(reg);//["a"] abc中的a
    
    • \n [\n]换行符
    • \f 换页符
    • \r 回车符
    • \t [\t]制表符
    • \v 垂直制表符
    • \uxxxx Unicode字符
    //匹配所有字符
    var reg = /\d\D/;// /\s\S/ /\w\W/
    
  • 量词(贪婪匹配原则)在量词后边添加?改为非贪婪匹配
    • n+ {1,infinity}
    • n* {0,infinity}
    • n? {0,1}
    • n{X} {X}
    • n{x,y} {x,y}
    • n{x,} {x,infinity}
    • ?=n 匹配任何其后紧接指定字符n的字符串
    • ?!n 匹配任何其后没有紧接指定字符n的字符串
    var reg = /\w*/g;
    var str = 'abc';
    str.match(reg);//['abc','']
    
    var reg1 = /\d*/g;
    str.match(reg1);//['','','','']
    
    var reg2 = /\w?/g;
    str.match(reg2);// ["a", "b", "c", ""]
    
    var reg3 = /\w{3}/g;
    var str1 = 'abcdefghi';
    str1.match(reg3);// ["abc", "def", "ghi"]
    //正向预言
    var reg4 = /a(?=b)/g;
    var str4 = 'aabaab';
    str4.match(reg4);//["a", "a"]
    // 非贪婪匹配
    var reg5 = /a{1,3}?/g;
    var str5 = 'aaaa';
    str5.match(reg5);//["a", "a", "a", "a"]
    
  • RegExp对象属性
    • reg.global 是否具有标志g
    • reg.ignoreCase 是否具有标志i
    • reg.lastIndex 整数,标示下一次匹配的字符位置
    • reg.multiline 是否具有标志
    • reg.source 匹配规则 双斜杠之间的内容
  • RegExp对象方法
    • reg.test(str) 检索字符串中指定的值,返回true或false
    • reg.exec(str) 检索字符串中指定的值,返回找到的值,并确定其位置
  • () 当子表达式使用
    	var str = 'aabbaabbaabbaabbaabb';
    	var reg = /(\w)\1(\w)\2/g;// \1 表示复制第一个子表达式的内容
    	//有全局匹配规则时,每次查找都是从上一次匹配的 reg.lastIndex 的值之后开始查找,可以手动更改 reg.lastIndex 的值。
    	console.log(reg.exec(str));// ["aabb", "a", "b", index: 0, input: "aabb", groups: undefined] //连带子表达式的内容一起返回
    	console.log(reg.exec(str));// ["aabb", "a", "b", index: 4, input: "aabb", groups: undefined] //连带子表达式的内容一起返回
    	var reg1 = /b/g;
    	console.log(reg1.exec(str));//["b", index: 2, input: "aabb", groups: undefined]
    
  • 支持正则的String方法
    • str.match(reg)
    var str = 'aabb';
    var reg = /(\w)\1(\w)\2/;
    //当没有全局匹配,只匹配一个时,和exec返回一致;
    console.log(str.match(reg));// ["aabb", "a", "b", index: 0, input: "aabb", groups: undefined] //连带子表达式的内容一起返回
    //有全局匹配规则时,返回的是所有结果组成的数组
    var reg1 = /(\w)\1(\w)\2/g;
    console.log(str.match(reg));//["aabb"]
    
    • str.search(reg)
    var str = 'aabb';
    var reg = /(\w)\1(\w)\2/g;
    //返回第一个匹配成功的下标,没有则返回-1,与lastIndex无关
    console.log(str.search(reg));//0
    
    • str.split(reg)
    var str = 'dfsaf5fds2gsdg2adg1fdas';
    var reg = /\d/g;
    console.log(str.split(reg));//["dfsaf", "fds", "gsdg", "adg", "fdas"]
    //不能使用子表达式的形式,会将子表达式的值一起返回
    var reg1 = /(\d)/g;
    console.log(str.split(reg1));//["dfsaf", "5", "fds", "2", "gsdg", "2", "adg", "1", "fdas"]
    
    • str.replace(str1,str2) 当str1不是正则表达式并且没有全局匹配的时候只匹配第一个
    var str = 'aa';
    var reg = /a/g;
    console.log(str.replace('a','b'));//ba
    console.log(str.replace(reg,'b'));//bb
    
    //翻转字符串
    var str1 = 'aabbaabbaabbaabb';
    var reg1 = /(\w)\1(\w)\2/g;
    console.log(str1.replace(reg1,'$2$2$1$1'));// $1 表示第一个子表达式
    console.log(str1.replace(reg1,function($, $1, $2){
    	//console.log($,$1,$2);//aabb a b
    	return $2+$2+$1+$1;
    }))
    //the-first-name 转为小驼峰命名
    var str2 = 'the-first-name';
    var reg2 = /-(\w)/g;
    console.log(str2.replace(reg2,function($, $1){
    	return $1.toUpperCase();
    }))
    
    //连续字符去重
    var str3 = 'aaaaabbbbbbcccccddfaddbc';
    var reg3 = /(\w)\1*/g;
    console.log(str3.replace(reg3,"$1"))//abcdfadbc
    
    //10000000 以 10.000.000 表示
    var str4 = '10000000';
    var reg4 = /(?=(\B)(\d{3})+$)/g;
    console.log(str4.replace(reg4,'.'));//10.000.000
    
  • 常规字符串表达式
    var ruleReg = /[a-zA-Z0-9\u4e00-\u9fa5]/
  • 中文字符
    var chineseReg = /[\u4e00-\u9fa5]]/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值