美文网首页
JS 正则表达式#1

JS 正则表达式#1

作者: IamaStupid | 来源:发表于2020-07-01 09:30 被阅读0次

    和正则表达式搭配使用的方法,用的比较多的有三个:RegExp 对象的 test(),RegExp 对象的exec() ,字符串方法 match()。

    reg.test(str) // 返回true/false,表示在字符串中是否匹配对应的正则模式
    reg.exec(str) // 在字符串中如果匹配到对应的正则模式,则返回匹配的结果,如果未找到匹配,则返回值为 null
    str.match(reg) // 在字符串中如果匹配到对应的正则模式,则返回匹配的结果,如果未找到匹配,则返回值为 null

    找出字符串中的所有数字
    var str = "123abc4d5y6j70wslds";
    var reg, arr, arr2;
    
      // reg = new RegExp(/[0-9]/g);
      // arr = reg.exec(str)
      // arr2 = str.match(reg)
      // console.log('exec:', arr)
      // console.log('match:', arr2)
      // exec: ["1", index: 0, input: "123abc4d5y6j70wslds", groups: undefined] 
      // match:(8) ["1", "2", "3", "4", "5", "6", "7", "0"]
    
      reg = new RegExp(/[0-9]+/g);
      arr = reg.exec(str)
      arr2 = str.match(reg)
      console.log('exec:', arr)
      console.log('match:', arr2)
      // exec: ["123", index: 0, input: "123abc4d5y6j70wslds", groups: undefined]
      // match: (5) ["123", "4", "5", "6", "70"]
    

    正则表达式语法参考:http://c.biancheng.net/view/5632.html
    [0-9]:查找从 0 至 9 范围内的数字,即查找数字。
    n+: 重复匹配, 匹配任何包含至少一个 n 的字符串。

    匹配字母abc以及f到k之间的字母,即跳过d-e,L-z
      reg = new RegExp(/[abcf-k]+/g);
      arr = reg.exec(str)
      arr2 = str.match(reg)
      console.log('exec:', arr)
      console.log('match:', arr2)
      // exec: ["abc", index: 3, input: "123abc4d5y6j70wslds", groups: undefined]
      // match: (2) ["abc", "j"]
    
    找出字符串中符合手机号格式的字符串(以13,14,15,18开头的11位数字)
    str = "张三zhangsan,性别男,电话1391511231218877777771558nnxy999999999,固定电话021-8800"
      // reg = new RegExp(/1[3458][0-9]{9}/g);
      reg = new RegExp(/(13|15|18|14)[0-9]{9}/g);
      arr = reg.exec(str)
      arr2 = str.match(reg)
      console.log('exec:', arr)
      console.log('match:', arr2)
      // exec: (2) ["13915112312", "13", index: 17, input: "张三zhangsan,性别男,电话1391511231218877777771558nnxy999999999,固定电话021-8800", groups: undefined]
      // match: (2) ["13915112312", "18877777777"]
    

    其实字符串中还有一个字符串15112312188,但是没有匹配到,因为匹配的时候,有一个索引,当匹配到13915112312的时候,索引已经移到15后面了,自然匹配不到了。
    另外,有时候看到条件,以13,15...开头,就习惯性给正则加上了符号,这是不对的,符号是表示匹配的字符串是不是以13,15...开头,一般在test()正则判断的时候用的多,比如验证一个手机号是否输入正确。

    把三个手机号全部找到的方法
    let reg = /(1[3458](?=[0-9]{9}))/g
    let str = "张三zhangsan,性别男,电话13915112312188777777777,固定电话021-8800"
    while (match = reg.exec(str)) {
    console.log(str.substr(match.index,11));
    }
    

    ?= 表示只做匹配,但是不消耗字符,所以如果用match,会发现结果只抓取了['13','15','18']

    相关文章

      网友评论

          本文标题:JS 正则表达式#1

          本文链接:https://www.haomeiwen.com/subject/ffpxqktx.html