JavaScript正则表达式的模式匹配教程,并且附带充足的实战代码(三)

简介: 我们继续来学习正则表达式吧,没有看过之前文章的小伙伴建议点击上方链接,从第一篇开始看,本系列文章适合从未接触过或不太了解正则表达式的人

指定匹配位置


上一篇我们讲到了分组与引用,本文就从指定匹配位置开始讲。


在正则表达式中,我可以利用某些字符,去指定匹配发生的位置。这些字符我们称之为正则表达式的


字符
含义
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配一个单词的边界
\B 匹配非单词边界的位置
(?=p) 零宽正向先行断言,?=后面的字符都要与p匹配,但不能包括p的那些字符
(?!p) 零宽负向先行断言,?!后面的字符不与p匹配


我们来逐个说一下这几个字符的用法:


  • ^ 符号


^ 这个符号是将匹配位置定位到字符串的开头,直接来看一个例子


    /*--------------------------第一种情况--------------------*/
    let pattern = /^javascript/let str = "javascript is fun"
    str.match(pattern)         //返回 ['javascript']
    /*--------------------------第二种情况--------------------*/
    let pattern = /^javascript/let str = "i love javascript"
    str.match(pattern)         //返回 null


    我们匹配的模式是,要以javascript开头的字符串。第一种情况,字符串以 javascript开头,所以能匹配到;第二种情况,javascript不是在开头的位置,而是在末尾的位置,不符合匹配模式,所以匹配失败返回null。


    在前面我们有一个地方还用到了 ^ 这个符号,那就是 [^abc] ,所以一定要注意,当 ^ 放在方括号里,表示的是取反,也就是说不匹配方括号里的任何字符。


    • $ 符号


    $ 这个符号是将匹配位置定位到字符串的末尾,直接来看一个例子


      /*--------------------------第一种情况--------------------*/
      let pattern = /javascript$/let str = "javascript is fun"
      str.match(pattern)         //返回 null
      /*--------------------------第二种情况--------------------*/
      let pattern = /javascript$/let str = "i love javascript"
      str.match(pattern)         //返回 ['javascript']


      我们的匹配模式是,字符串要以javascript结尾。第一种情况,字符串结尾处字符是 fun ,不符合匹配模式,返回null;第二种情况,结尾处字符为javascript,符合匹配模式,所以匹配成功。


      我们可以看一下如果 ^ 符号 和 $ 符号一起使用是什么情况:


        let pattern = /^javascript$/let str = "javascript"
        str.match(pattern)      //返回  ["javascript"]


        当这两个符号一起使用时,匹配模式就变成了匹配整段字符串,并且字符串的内容就是 ^ 与 $ 之间的内容


        • \b


        这个符号的作用是匹配一个单词的边界,我们来看几个例子来理解一下


          /*-------------------------第一种情况----------------------*/
          let pattern = /\bjava/let str = "I love javascript"
          str.match(pattern)         //  返回 ['java'] 匹配成功
          /*-------------------------第二种情况----------------------*/
          let pattern = /\bjava/let str = "javascript is fun"
          str.match(pattern)         //  返回 ['java']   匹配成功
          /*-------------------------第三种情况----------------------*/
          let pattern = /\bjava/let str = "1javascript is fun"
          str.match(pattern)         //  返回 null   匹配失败
          /*-------------------------第四种情况----------------------*/
          let pattern = /java\b/let str = "I am learning java"
          str.match(pattern)         //  返回 ['java']   匹配成功
          /*-------------------------第五种情况----------------------*/
          let pattern = /java\b/let str = "I am learning javascript"
          str.match(pattern)         //  返回 null   匹配失败
          /*-------------------------第六种情况----------------------*/
          let pattern = /\bjava\b/let str = "I think java is fun"
          str.match(pattern)         //  返回 ['java']   匹配成功


          看了上面几个例子,你有没有得出什么规律?


          其实 \b 的作用就是将匹配的点放到一个字符串前面(\b放前面)或后面(\b放后面)的 [^a-zA-Z0-9] 处,也可以理解为 \b 可以替换那些特殊字符,但 \b 不会作为匹配的内容。


          • \B


          \B 则与 \b 相反了, \b 可以替换那些特殊字符,那么\B就是用来替换那些非特殊字符,也就是 [a-zA-Z0-9] 内的字符。


          也来举几个简单的例子吧


            /*-------------------------第一种情况----------------------*/
            let pattern = /java\B/let str = "I love javascript"
            str.match(pattern)         //  返回 ['java'] 匹配成功
            /*-------------------------第二种情况----------------------*/
            let pattern = /java\B/let str = "I love java"
            str.match(pattern)         //  返回 null 匹配失败
            /*-------------------------第三种情况----------------------*/
            let pattern = /\Bjava\B/let str = "I love 1javascript"
            str.match(pattern)         //  返回 ['java'] 匹配成功
            /*-------------------------第四种情况----------------------*/
            let pattern = /\Bjava\B/let str = "I love javascript"
            str.match(pattern)         //  返回 null 匹配失败


            • (?=p)


            (?=p)表示接下来的字符要与p匹配,但p不会作为内容返回


            先来看一个例子


              let pattern = /java(script)?(?=\:)/let str = "java: my favorite language"
              str.match(pattern)       //返回 ["java", undefined]  匹配成功


              该例子的匹配模式:匹配一段字符串为java 然后 script 可以有一个也可以没有,后面必须跟一个 :,才能匹配成功,返回匹配内容,但是匹配内容中不包含 :


              再来看一个类似的例子


                let pattern = /java(script)?(?=\:)/let str = "javascript is my favorite language"
                str.match(pattern)       //返回 null  匹配失败


                该例子匹配失败是因为字符串中的javascript后面没有 :,没有满足 (?=\:)的匹配要求


                • (?!p)


                (?!p)与(?=p)相反,它表示接下来的字符不与p匹配


                我们也来看一个例子


                  let pattern = /java(?!script)/let str = "javascript is my favorite language"
                  str.match(pattern)       //返回 null  匹配失败


                  该例子的匹配模式是:匹配一段字符,只要java后面紧跟的字符不是script即为匹配成功,同时java后面跟的内容也不会作为内容返回。但这个例子中的 str 里, java后面紧跟着的就是script,所以匹配失败。那么成功的例子就是这样的


                    let pattern = /java(?!script)/let str = "javascr1111 is my favorite language"
                    str.match(pattern)       //返回 ["java"]  匹配成功


                    在该例子中, java 后面跟着的就不是script了,所以匹配成功了。java后面的字符不作为内容返回,所以最后的匹配结果就是 java


                    结束语


                    第三篇对于 JavaScript正则表达式的讲解就先到这里,明天后天会继续更新第四篇,并且我会在之后的文章上放上前几篇的文章链接,方便大家观看,希望大家持续关注,点个关注,不迷路

                    相关文章
                    |
                    17天前
                    |
                    JSON JavaScript 前端开发
                    JavaScript原生代码处理JSON的一些高频次方法合集
                    JavaScript原生代码处理JSON的一些高频次方法合集
                    |
                    1月前
                    |
                    移动开发 JavaScript 前端开发
                    JavaScript的正则表达式实现邮箱校验
                    JavaScript的正则表达式实现邮箱校验
                    52 1
                    |
                    1月前
                    |
                    存储 JavaScript 前端开发
                    非常实用的JavaScript一行代码(整理总结)
                    非常实用的JavaScript一行代码(整理总结)
                    30 0
                    |
                    1月前
                    |
                    JavaScript 前端开发
                    JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
                    JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
                    |
                    1月前
                    |
                    JavaScript 前端开发 测试技术
                    如何编写JavaScript模块化代码
                    如何编写JavaScript模块化代码
                    12 0
                    |
                    1月前
                    |
                    JSON 前端开发 JavaScript
                    16个重要的JavaScript代码
                    16个重要的JavaScript代码
                    32 1
                    |
                    1月前
                    |
                    Windows Perl
                    Perl 教程 之 Perl 正则表达式 8
                    Perl的正则表达式是其强项,常用于字符串匹配、查找、替换等。基本操作包括:`.`匹配任意字符(除换行符),`x?`匹配0或1次`x`,`x*`匹配0或多次`x`,`x+`匹配1或多次`x`。还有范围匹配如`[0-9]`、否定匹配`[^a-z]`、边界匹配`\b`等。特殊序列如`\d`代表数字,`\s`代表空格,`()`用于记忆匹配内容,`/pattern/i`忽略大小写。
                    10 0
                    |
                    1月前
                    |
                    Perl
                    Perl 教程 之 Perl 正则表达式 7
                    Perl教程讲解了其强大的正则表达式功能,用于字符串匹配、查找、替换和提取。示例展示如何使用`/s`删除变量`$string`中的重复字符,输出结果为原字符串。其他实例包括将非数字字符替换为空格,删除tab和空格,以及将数字间字符替换为单个空格。
                    15 3
                    |
                    1月前
                    |
                    Perl
                    Perl 教程 之 Perl 正则表达式 6
                    **Perl正则表达式强大多能,常用于字符串匹配、替换和提取。转化操作符如`tr`用于字符转换,如将所有小写字母转大写:`$string =~ tr/a-z/A-Z/`。**
                    17 2
                    |
                    1月前
                    |
                    JavaScript
                    当当网新用户注册界面——JS代码
                    当当网新用户注册界面——JS代码
                    7 0