前端基础21:正则基础

212 阅读2分钟

正则

正则验证

	var str = 'hello';
	var reg = /ll/;
	reg.test(str)//true
  • 正则原型上有一个test方法,可以让所得正则实例调用,返回一个Boolean值 ###量词元素符 |符号|意义| |--|--| |*|表示0到多次| |+|表示1到多次| |?|表示0或者1次| |{n}|表示出现n次| |{n,}|表示出现n到多次| |{n,m}|表示出现n到m次|

特殊元字符

符号 意义
\d 匹配一个数字字符
\D 匹配非数字
\w 匹配A-Z,a-z,0-9
\W 匹配非单词字符
\s 匹配任意空字符
\b 匹配边界字符
x|y 匹配x或y
[zyx] 表示xyz任意一个
[^zyx] 匹配不是zxy任何一个
[a-z] 匹配a-z的任意一个
[^a-z] 匹配非a-z
^ 代表以什么开头
$ 代表以什么结束
. 代表任何字符(除了\n)
|表示转意
\n 换行符
?: 只匹配不捕获
  • 分组:var reg = /1(8|1)9/
    • 功能: - 1.提高优先级明确规则 - 2.分组引用 -
  • []里面大部分本来有意义的符号变成普通的字符

修饰符

符号 意义
g 全局匹配
i 忽略大小写
m 行首行尾
  • 每一个正则都有一个global,若加g则这个值为true,否则为false

正则捕获

  • exec 参数:
    • 1.result是一个数组
    • 2.数组的第一项:是正则捕获到的字符
    • 3.数组的第二项:是第一个小括号里面正则匹配到的字符(若多个小括号以此类推)
    • 4.index属性:表示正则开始匹配的位置在原字符串的索引
    • 5.input属性:表示需要匹配的字符串

reg.lastIndex

  • 1.每一个正则都有一个lastIndex 默认值为0
  • 2.lastIndex就是正则下一次匹配验证在的位置的索引

每次reg.test后,通过RegExp.$n可以捕获到第n个分组的内容

    var reg = /(\d)(\d)/g;
    var str = '123';
    reg.test(str);
    console.log(RegExp.$1);//1
    console.log(RegExp.$2);//2

match

  • 字符串的方法match传入一个正则
  • 如果正则带g,以数组形式返回匹配到的结果
    var reg2 = /(\d{2})-(\d{2})/g;
    var str2 = 'a11-22b22-33';
    console.log(str2.match(reg2));//["11-22", "22-33"]
  • 如果传入match的正则没有带g,那么返回效果和reg.exec是一样的
    var reg2 = /(\d{2})-(\d{2})/;
    var str2 = 'a11-22b22-33';
    console.log(str2.match(reg2));//["11-22", "11", "22", index: 1, input: "a11-22b22-33", groups: undefined]

  • 返回一个数组,第一项是正则匹配到的字符,第二项是第一个分组捕获到的字符(以此类推)和exec属性相同

replace

  • 1.第一项是正则匹配的内容
  • 2.第二项到倒数第三项是分组的内容(分组依次类推)
  • 3.倒数第二项是本次匹配成功的内容的开始索引
  • 4.倒数第一项是需要匹配的字符串
  • 5.字符串的内容能被正则匹配到几次,后面的内容执行(callback)几次就会执行几次
    var str4 = 'a11-22b22-33c'
    var str5 = str4.replace(/(\d{2})-(\d{2})/g,function () {
        console.log(arguments);
    });
  • 6.每次return的内容会把匹配到的内容替换
    var str4 = 'a11-22b22-33c'
    var str6 = str4.replace(/(\d{2})-(\d{2})/g,function () {
        return 'T';
    })
    console.log(str6);//aTbTc
  • 思考:
    //思考题
    //格式化时间->时间按照指定的格式拼接成新的字符串
    var str = "2017-08-10 15:30:45";
    var tempStr = "{0}年{1}月{2}日 {3}时{4}分{5}秒";
    //->2017年08月10日 15时30分45秒
    var reg1 = /\d+/g;
    var res1 = str.match(reg1);
    var reg2 = /\{(\w)\}/g;
    var res2 = tempStr.replace(reg2,function ($1,$2) {
        return res1[$2];
    })
    console.log(res2);