JavaScript基础(12_正则表达式)

正则表达式

正则表达式

  • 用于定义一些字符串的规则

    • 计算机可以根据正则表达式,来检查一个字符串是否符合规则

    • 语法:

      • var 变量 = new RegExp("正则表达式", "匹配模式"); (更为灵活)

      • 在构造函数中可以传递一个匹配模式作为第二参数

        • i = 忽略大小写

        • g = 全局匹配模式

        • var reg = new RegExp("需要匹配的文本", "i")
      • 使用字面量创建正则表达式: var 变量 = /正则表达式/匹配模式 (更为简单)

        • var reg = /a/i
    • 正则中的test()方法

      • 如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false

      • 严格区分大小写

    • 或者

      • 使用 | 表示或者的意思

      • 使用[] ,里面的内容也是或的关系,如: [abc] = a或b或c

      • 使用中横线

      • 表示任意小写字母 [a-z]

      • 表示任意大写字母 [A-Z]

      • 表示任意数字 [0-9]

      • 表示abc 或者adc 或者 aec /a[bde]c/

    • 除了

      • 除了ab以外的

      • // 可以写为[^ab]

基本用法

  • split()

    • 可以将字符串拆分为一个数字

    • 可以传递一个正则表达式作为参数,这样可以根据正则来拆分字符串

    • 这个方法即使不指定全局匹配,也会全部拆分

    • var str = "1a2b3c4d5e6fGa9"
      var reg = new RegExp("[a-z]","i")
      res = str.split(reg)
      console.log(res)  // ["1", "2", "3", "4", "5", "6", "", "", "9"]
  • match()

    • 可以根据正则表达式,从一个字符串中,将符合条件的内容提取查出来

    • 默认情况下,match只会找到第一个符合要求的内容,找到后就停止检索

    • 可以设置正则为全局匹配模式,这样就可以匹配所有的内容了

    • 将匹配到的内容封装到数组中能够返回,即使仅仅匹配到一个

    • var str = "1a2b3c4d5e6fGa9"
      var reg1 = new RegExp("[a-z]","i")
      var reg2 = new RegExp("[a-z]","g")
      res1 = str.match(reg1)
      res2 = str.match(reg2)
      console.log(res1)   //["a", index: 1, input: "1a2b3c4d5e6fGa9", groups: undefined]
      console.log(res2)   //["a", "b", "c", "d", "e", "f", "a"]
  • search()

    • 如果搜索到指定内容,则会返回第一次出现的索引

    • 如果没有搜到,则返回-1

    • 可以接收一个正则作为参数,然后根据正则进行检索

    • 只会查找第一个,不能全局匹配

    • var str = "1a2b3c4d5e6fGa9"
      var reg1 = new RegExp("b","i")
      var reg2 = new RegExp("M","g")
      res1 = str.search(reg1)
      res2 = str.search(reg2)
      console.log(res1)   //3
      console.log(res2)   //-1
  • replace()

    • 可以搜索字符串中是否含有指定的内容替换为新的内容

    • 参数

      • 被替换的内容,可以接收一个正则表达式作为参数

      • 新的内容

      • 默认只会替换第一个

      • var str = "1a2b3c4d5e6fGa9"
        var reg1 = new RegExp("b","ig")
        var reg2 = new RegExp("[a-z]","ig")
        res1 = str.replace(reg1,"+")
        res2 = str.replace(reg2,"?")
        console.log(res1) //1a2+3c4d5e6fGa9
        console.log(res2) //1?2?3?4?5?6???9

量词

  • 创建一个正则表达式,检查一个字符串中是否含有aaa

    • var reg1 = /aaa/
    • var reg2 = new RegExp("a{3}")
  • 通过量词可以设置一个内容连续出现的次数

    • {n} 正好连续出现n次

    • (ab){3}, 表示ab正好连续出现3次

    • {ab{1,3}c}, 表示b可以出现1次到3次

    • {ab{1,}c}, 表示b可以出现1次以上

    • +表示至少1个

    • "*"表示0个或者多个,相当于{0,}

    • ? 表示0个或者1个,相当于{0,1}

    • ^ 表示开头,如/^a/ 表示以a开头

    • $ 表示结尾,如/a$/ 表示以a结尾
  • 案例

    • var phoneStr = "13567890123";
      var reg = /^1[3-9][0-9]{9}$/;
      console.log(reg.test(phoneStr))

补充

  • "."

    • 任意字符

  • \

    • 转译字符

    • 注意 使用构造函数时,由于他的参数是字符串,而\是字符串中转译字符

    • 如果要使用\则需要使用\\代替
  • \w

    • 表示任意字母、数字、下划线

  • \W

    • 表示出了任意字母、数字、下划线

  • \d

    • 表示任意数字

  • \D

    • 表示除了数字

  • \s

    • 表示空格

  • \S

    • 表示除了空格

  • \b

    • 单词边界

  • \B

    • 除了单词边界

  • 案例

    • // 检查字符串中是否含有.
      var reg = /\./;
      var str = prompt("输入用户名");
      // 去除开头和结尾的所有空格
      console.log(str.replace(/^\s*|\s*$/g, ""));
posted @ 2020-09-20 16:33  名叫蛐蛐的喵  阅读(101)  评论(0编辑  收藏  举报