• JavaScript正则学习笔记


    一、正则表达式基础

    正则表达式乐意理解为一种规则和模式,用于匹配特定的字符串,所以它只是针对于字符串,那么自然需要先了解一些正则中常用的字符串的方法,以便于与正则进行结合。

    (一)字符串基础

    1、字符串常用方法

    • search

    用于检索字符串中的子字符串,或者检索与正则表达式匹配的子字符串。

    参数:字符串或者正则表达式

    返回值:返回第一个与参数相匹配的子字符串的位置,如果没有检索得到匹配的子字符串就返回-1

    注意:该方法不执行全局匹配,忽略标识g;大小写敏感,除非正则表达式显示指定忽略大小写i

    <script>
        var str = "abcdefghijk"
        alert(str.search("b")) //结果为1
    </script>
    • match

    用于检索指定的值,检索到与正则表达式匹配的一个或多个值

    参数:正则表达式

    Array. 存放匹配结果的数组。

    注意:正则表达式中是否有全局标志g

    <script>
        var str = "abcd123efghi456jk"
        alert(str.match(/d+/)) //123
        alert(str.match(/d+/g)) //123,456
    </script>
    • replace

    用于字符串中一个字符替换为另一个字符,或者替换掉与正则表达式匹配的字符(子串)

    参数:第一个参数表示替换的字符(字符串)或者正则表达式,第二个参数表示替换成什么样的字符(字符串)

    返回值:一个新的字符串,是用 第二个参数替换了 regexp 的第一次匹配或所有匹配之后得到的

    注意:正则匹配全局需要使用全局标志g

    <script>
        var str = "abcd123efgahi456jk"
        alert(str.replace(/a/,"A")) //匹配第一个字符a,替换为A
        alert(str.replace(/a/g,"A")) //匹配全局所有字符a,替换为A
        alert(str.replace(/d/,"A")) //匹配第一个数字,替换为A
        alert(str.replace(/d/g,"A")) //匹配全局数字,替换为A
    </script>

    二、正则表达式

    正则是RegExp对象,它有两种风格,分别是JS风格与perl风格,可以先看看它们的风格是怎么样的:

    <script>
        var str = "abcd123efgahi456jk"
        re = new RegExp("a","i")  //JS风格
        re = /a/i  //perl风格
        alert(re.test(str)) //结果都是true
    </script>

    它们实现的效果都是一样的,但是第二种显然更简便一些。

    (一)字符类

    1、任意字符

    • [abc]

    比如:m[abc]n--->man、mbn、mcn

    <script>
        var str = "ma6 6bc mc6"
        alert(str.match(/m[abc]6/g)) //全局匹配ma6,mc6
    </script>

    2、范围

    • [a-z]、[0-9]、[A-Z]

    比如:m[a-z]--->ma、mb、mc...

      var str = "ma66bcmc6"
      alert(str.match(/[a-z]/g)) //全局匹配[m,a,b,c,m,c]
    </script>

    注意:[]匹配的都是单个字符

    3、排除

    • [^a]
    <script>
     var str = "ma66bcmc6"
      alert(str.match(/[^a-z]/g)) //全局匹配[6,6,6] 排除a-z的英文字母
    </script>

    4、组合

    • [a-z0-9A-Z]

    表示a-z0-9A-Z中的每一个字符或者数字

    <script>
      var str = "ma66bcMc6LK"
      alert(str.match(/[a-z0-9A-Z]/g)) //全局匹配[m,a,6,6,b,c,M,c,6,L,K] 
    </script>

    5、转义字符

    • .(点)

    表示任意的字符

    <script>
      var str = "ma66bcMc6LK"
      alert(str.match(/./g)) //全局匹配[m,a,6,6,b,c,M,c,6,L,K]
    </script>
    • d、w、s

    d表示单个数字

    <script>
      var str = "ma66bcMc_6LK"
      alert(str.match(/d/)) //匹配第一个[6]
      alert(str.match(/d/g)) //全局匹配[6,6,6]
    </script>

    w表示单个字母、数字及下划线,如果匹配全部需要用全局标志g(相当于[a-z0-9_])

    <script>
      var str = "ma66bcMc_6LK"
      alert(str.match(/w/)) //匹配第一个字符、数字以及下划线[m]
      alert(str.match(/w/g)) //全局匹配字符、数字以及下划线m,a,6,6,b,c,M,c,_,6,L,K
    </script>

    s表示空格

    <script>
      var str = " abc def "
      alert('('+str.replace(/s/g,"")+')')
    </script>
    • D、W、S

    D表示非数字相当于[^0-9]

    W表示非小写字母、数字及下划线[^a-z0-9]

    S表示除了空白字符之外的字符

    (二)量词

    1、常用量词

    量词表示的是出现的次数,常用的量词有:

    • {n,m}

    至少出现n次,最多出现m次。

    • {n,}

    至少n次

    • *

    任意次,想当于{0,}

    • ?

    零次或者一次,相当于{0,1}

    • +

    一次或者任意次,相当于{1,}

    • {n}

    正好n次

    2、实例

    • 邮箱验证

    邮箱的格式用汉语表示就是:一串数字、字母、下划线   @   一串英文、数字  .  一串英文(长度2-4),用正则表示就是:

    #邮箱的正则表达式为
    w+@[a-z0-9]+.[a-z]{2,4}

    但是如果仅仅这样写,当前面有汉语时依然会匹配成功,所以正确的写法是开头匹配,以及必须有结尾标识符

    #邮箱的正则表达式为
    ^w+@[a-z0-9]+.[a-z]{2,4}$
    • 检测中文
    <script> 
     var str = "我是zhongguoren"
      var re=/[u4e00-u9fa5]/;
      alert(re.test(str))
    </script>
    • 匹配QQ号

    假设现在QQ号最少有5位,最多有11位

    <script>
        var str = "25369815,523,89635471"
        console.log(str.match(/[1-9]d{4,10}/g))
    </script>
  • 相关阅读:
    generatorConfiguration详解
    fastjson java类、字符串、jsonObject之前的转换
    非CI执行Allure2 trends空白问题
    如何相互转换逗号分隔的字符串和List【转】
    搞服务器性能时有感
    EF实体实现链接字符串加密
    小程序接口测试之本地测试
    WebApi生成在线API文档--Swagger
    C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法【转】
    懵逼的this指向
  • 原文地址:https://www.cnblogs.com/shenjianping/p/12194568.html
Copyright © 2020-2023  润新知