js正则表达式入门教程(详细)

首先,我们先讨论一下什么是正则?为什么需要正则?正则能做哪些事情?

正则表达式实际上就是规定了一系列的字符串规则,例如说我们看到18788724827就能知道这是一个手机号,看到zifieyu@xx.com就知道这是一个邮箱。那么,我们怎么让计算机知道这一切呢?

我们人类之所以能分辨出来是因为我们心里有一个模型,我们知道十一位的数字很有可能就是一个手机号,@+邮箱品牌+.com的组合很有可能是一个邮箱。正则正式提供一种语法,让我们把自己心中的那种识别模式告诉计算机,让计算机能像我们人类一样去识别特定的字符串。好了话不多说,下面正式介绍一下正则的使用。

  1. 创建

    正则也是一个js内置对象,所以可以通过new RegExp()的形式创建,也可以通过简写//的形式创建:

    var re01 = new RegExp('a'); //这种形式创建,可以往正则中传入变量
    var re02 = /a/; // 简写形式不可以传入变量,且不能加引号
  2. 方法test

    re.test(str)方法是正则对象上的一个方法,接受一个字符串作为参数,如果字符串中有符合正则的部分,则返回true,反之则返回false。

    var str = 'abcd';
    var re = /a/;
    re.test(str) // true
  3. 方法search

    str.search(re),查找字符串中是否有符合正则的部分,如果有,返回第一个匹配项的位置,否则返回-1;

    var str = 'bbcasa';
    var re = /a/;
    str.search(re) // 4
  4. 方法match

    str.match(re),寻找字符串中符合正则的匹配项,并将这些匹配项以数组的形式返回,否则返回null。

    var str = 'abcaadaefaa';
    var re = /a+/g; 
    // "+" 是一个量词表示出现一次或更多,"g"表示全局搜索,正则默认匹配到一个匹配项后就不会继续查找了。
    str.match(re) // ["a", "aa", "a", "aa"]
  5. 方法replace

    str.replace(re, newStr | callback) 该方法首先匹配字符串中符合正则的部分然后替换成newStr或者callback的返回值;这里的callback = function(str,str1,str2…){return res},参数str表示匹配到的匹配项,str1,str2…分别表示正则匹配项中的第一个,第二个子项。关于什么是子项,后面我们会详细介绍。

    var str = "我爱吃饭,我爱睡觉,我爱打豆豆";
    var re = /(吃饭)|(睡觉)|(打豆豆)/g ;
    str.replace(re, (...grv) => {
        var res = [];
        res = grv[0].split("").map(() => {return "*"}).join("")
        return res
    })

    上面的例子中,我们过滤了某些词语,并且将其替换成**号,相信,大家在玩游戏的时候深有体会,打了半天字,发出去的没有几个!

  6. 默认行为

    正则表达式中默认是区分大小写的,不过可以通过在末尾加上i来关闭这一默认行为

    var re=/AbvR/i;

    找到第一个匹配项就会结束查找,通过在末尾加g可以使得正则变成全局匹配模式

    var re=/as/b;
  7. 正则中的小括号

    分组操作:小括号内的部分作为一个整体进行操作,请看下面的例子

    var str = '2017-8-12'
    var re01 = /\d-+/g 
    var re02 = /(\d-)+/g
    str.match(re01) // ['7-', '8-']
    str.match(re02) // ['7-8-']

    匹配子项:整个正则匹配到的匹配项我们暂且成为父项,然后就容易理解,被小括号括起来的各个部分就是父项下面的一个一个的子项。

    var str = '2017-8-12'
    var re = /(\d+)(-)/g
    str.replace(re, ($0, $1, $2) => {
        console.log($0, $1, $2)
        return $1 + "."
    }) // 2017- 2017 -;  8- 8 -;  2017.8.12

    match()方法在不加g的情况下,在返回的数组中会展开所有子项;

    var str = 'abc'
    var re = /(a)(b)(c)/
    str.match(re) // ['abc', 'a', 'b', 'c']
  8. 正则中的中括号

    字符类:一组相似的字符,[abc]整体代表一个字符,内部为或的关系。

    • [^abc]:代表一位,单不能是a,b,c
    • [a-z]: 代表一个范围(从小到大),整体代表一位;
    • [a-z]+: 一位或多位
  9. 正则中的大括号

    大括号用来表示量词

    • {4, 7}: 4-7次
    • {4,}:最少4次
    • {4}:正好4次
    • {1,} 相当于+
    • ?相当于{0,1}
    • *相当于{0,}
  10. 限制字符串的起始和结束

    • ^: 写在正则的开头代表字符串的起始
    • $:写在正则的结束代表字符串的结re=/^\s*|\s*$/g //去掉收尾空格
  11. 正则中的转义字符

    • 点“.”
      正则中“.”表示任意字符
      . 表示真正的点
      多用于文件后缀名
    • \d; \D
      数字,非数字
    • \w;\W
      字符,非字符
    • \s; \S
      空格,非空格
    • \b;\B
      • 独立部分,非独立部分
      • 独立部分是什么:
        起始
        结束
        空格
    • \1; \2; \3 …
      重复第n个子项
      目的:看下面两个例子有什么不同
    var re = /\w\w/; ab,cd
            var re =/(\w)\1/; aa, bb
  12. 实际开发环境

    实际公司开发环境中,应该把正则都放到一个对象或者一个json中,方便统一管理,统一调配

  • 6
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值