zoukankan      html  css  js  c++  java
  • JS—正则表达式

    正则表达式的元字符是包含特殊含义的字符,它们有一些特殊的功能,可以控制匹配模式的方式,反斜杠后的元字符失去其特殊含义。

    • 单个字符和数字
      • .表示匹配除换行符外的单个字符,两个.就表示匹配两个字符
         var pattern1=/g.gle/;
         alert(pattern1.test('gogle'))//true
         alert(pattern1.test('g
        gle'))//换行符false
         alert(pattern1.test('ggle'))//没有匹配false
         var pattern2=/g..gle/; 
         alert(pattern2.test('google'))//true
         alert(pattern2.test('gooogle'))//false
      • [a-z0-9A-Z]
        • [a-z] 表示26个小写字母任意一个都匹配
           var pattern1=/[a-z]oogle/;
            alert(pattern1.test('hoogle'))//true
            alert(pattern1.test('google'))//true
        • [A-Z] 表示26个大写字母任意一个都匹配
           var pattern1=/[A-Z]oogle/;
            alert(pattern1.test('Aoogle'))//true
            alert(pattern1.test('google'))//false
        • [0-9] 表示0-9任意一个数字都匹配
            var pattern1=/[0-9]oogle/;
             alert(pattern1.test('000000oogle'))//true
             alert(pattern1.test('google'))//flase
        • [a-zA-Z0-9] 表示匹配任意字母与数字
             var pattern1=/[a-zA-Z0-9]oogle/;
             alert(pattern1.test('0oogle'))//true
             alert(pattern1.test('google'))//true
             alert(pattern1.test('Foogle'))//true
          【结合重复字符使用】表示可以匹配任意多个字符
                 var pattern1=/[0-9]*oogle/;
                 alert(pattern1.test('oogle'))//true
                 alert(pattern1.test('00000google'))//true
      • [^a-z]表示取非,任意非小写字母
         var pattern1=/[^a-z]oogle/;
         alert(pattern1.test('0oogle'))//true
         alert(pattern1.test('google'))//flase
         alert(pattern1.test('Foogle'))//true
        当然也可以是任意非大写字母,非数字,非~
      • w小写表示匹配字母数字及_
         var pattern1=/[a-zA-Z0-9_]oogle/;//可以被后者取代
         var pattern2=/woogle/;
         alert(pattern2.test('_oogle'))//true        
         alert(pattern2.test('.oogle'))//false
      • W大写是小写的否定即,表示匹配任意非数字字母下划线
      • d匹配数字
         var pattern1=/[0-9]oogle/;
         var pattern2=/doogle/;
         alert(pattern2.test('2oogle'))//true        
         alert(pattern2.test('.oogle'))//false
      • D大写取非咯
    • 空白字符

      • s表示空白匹配
        var pattern1=/goosgle/;
         alert(pattern1.test('goo gle'))//true
    • 锚字符

      • ^[]放在中括号外面哦,表示限制中括号内的内容出现在字符串的开始,
      • []$表示限制中括号的内容,或紧邻其的一个字符需要出现在字符串的结尾
         var pattern1=/^google$/;
         alert(pattern1.test('google'))//true
         var pattern2=/^google/;
         alert(pattern2.test('googleeeeee'))//true
         var pattern3=/google$/;
         alert(pattern3.test('gggggoogle'))//true
         var pattern1=/^google[0-9]$/;
         alert(pattern1.test('google7777'))//false
         alert(pattern1.test('google7'))//true
      • 表示是否达到边界
         var pattern1=/google/;
         alert(pattern1.test('google'))//true
         var pattern1=/google/;
         alert(pattern1.test('googlee'))//flase
    • 重复字符
      • *表示匹配0个或任意多个*前面的字符
         var pattern1=/go*gle/;
         alert(pattern1.test('ggle'))//true
         alert(pattern1.test('gogle'))//true
         alert(pattern1.test('gooogle'))//true
      • +表示匹配1个或多个+前面的字符
        var pattern1=/go+gle/;
         alert(pattern1.test('ggle'))//false
         alert(pattern1.test('gogle'))//true
         alert(pattern1.test('gooogle'))//true
      • 表示匹配0个或一个?前面的字符
        var pattern1=/go?gle/;
         alert(pattern1.test('ggle'))//true
         alert(pattern1.test('gogle'))//true
         alert(pattern1.test('gooogle'))//false
        这个是表示对任意字符的重复限制。
        var pattern1=/g.?gle/;
         alert(pattern1.test('ggle'))//true
         alert(pattern1.test('gbgle'))//true
      • {m,n}匹配m~n个包括m与n个
         var pattern1=/go{2,4}gle/;
         alert(pattern1.test('gooooogle'))//false
         alert(pattern1.test('google'))//true
        表示只匹配限定个数个
         var pattern1=/go{2}gle/;
         alert(pattern1.test('gooooogle'))//false
         alert(pattern1.test('google'))//true
        表示至少匹配某个
         var pattern1=/go{2,}gle/;
         alert(pattern1.test('gooooogle'))//true
         alert(pattern1.test('google'))//true
      • ()+匹配至少一个模式
        var pattern1=/(google)+/;//对google这个字符串进行重复匹配
         alert(pattern1.test('googlegooglegoogle'))//true
    • 或字符
      或模式匹配
        var pattern1=/google|baidu|bing/;//或模式匹配
         alert(pattern1.test('this is baidu'))//true
         alert(pattern1.test('soso'))//false
    • 替代字符
        var pattern1=/(.*)s(.*)/;//替换
        var str='google baidu';
        alert(str.replace(pattern1,'$2 $1'));//baidu google    
        var pattern1=/8(.*)8/;//获取88之间的任意字符
        var str='this is 8google8';
        document.write(str.replace(pattern1,'<strong>$1</strong>'))
    • 记录字符
      • 分组
        var pattern1=/(google){2,4}/;//对google这个字符串进行重复匹配
         alert(pattern1.test('googlegooglegoogle'))//true
         alert(pattern1.test('google'))//flase
      • 捕获分组
        var pattern1=/8(.*)8/;//获取88之间的任意字符
         alert(pattern1.test('this is 8google8'))//true
        alert(RegExp.$1);//google表示获取模式中第一个分组对应的匹配的字符串,必须得运行过。

    贪婪与惰性

    • 贪婪模式
        var pattern=/8(.*)8/;// 使用了贪婪,匹配到了google8 8google8 8google
        var str='8google8 8google8 8google8';
        document.write(str.replace(pattern,'<strong>$1</strong>'))
    • 惰性模式
        var pattern=/8(.*?)8/g;//惰性模式,全部匹配
        var str='8google8 8google8 8google8';
        document.write(str.replace(pattern,'<strong>$1</strong>'))
      在*后面多加一个?表示取消贪婪模式,进行惰性模式,只进行匹配一个。
      下面这个是没有采用惰性模式,只是将匹配的结果中除去了8
        var pattern=/8([^8]*)8/g;//惰性模式,全部匹配
        var str='8google8 8google8 8google8';
        document.write(str.replace(pattern,'<strong>$1</strong>'))

    • 捕获与非捕获
      未添加分组时:.exec只返回当前位置匹配的字符串
        var pattern=/[a-z]*sd{4}/;
        var str='google 2015';
        alert(pattern.exec(str));//google 2015
      添加分组后,该分组内容被捕获,并赋给exec所返回的数组
        var pattern=/([a-z]*)s(d{4})/;
        var str='google 2015';
        alert(pattern.exec(str));//google 2015,goole,2015
      非捕获即取消分组被捕获(?:)通过在分组前加上问号与冒号,便可以取消捕获该分组。
        var pattern=/([a-z]*)s(?:d{4})/;
        var str='google 2015';
        alert(pattern.exec(str));//google 2015,goole
    • 分组嵌套
      嵌套分组需要~从外往内获取~
        var pattern=/(a?(b?(c?)))/;
        var str='abc';
        alert(pattern.exec(str));//abc,abc,bc,c
      第一步:获得匹配字符串:abc
      第二步:获得第一个分组,即最外层:abc
      第三步:获得第二个分组,bc
      第四步:获得最内层分组c
    • 使用前瞻捕获
        var pattern=/goo(?=gle)/;
        var str='google';
        alert(pattern.exec(str));//goo
      在正则匹配的字符串之后添加一对(),该括号内定义了匹配条件,只有当满足条件时,才可以进行匹配。注意该例子的最后匹配值为goo。
    • 使用特殊字符匹配
        var pattern=/[/;
        var str='[';
        alert(pattern.test(str));//true
      对于要匹配特殊最的情况,需要在其前加上斜杠,来标识。
    • 换行模式

        var pattern=/d+/g;
        var str='1、abc
      2、edf';
        alert(str.replace(pattern,'#'));//完全匹配,并替换
      
        var pattern=/^d+/g;
        var str='1、abc
      2、edf';
        alert(str.replace(pattern,'#'));//匹配第一个
      
        var pattern=/^d+/gm;
        var str='1、abc
      2、edf';
        alert(str.replace(pattern,'#'));//完全匹配,并替换

      当字符串内出现换行符时,如果我们不进行锚字符的使用,那么会匹配全局,包括换行后的。
      但是,由于使用锚字符,导致即使使用了全局,也没有办法匹配换行后的结果,此时需要开启换行。

  • 相关阅读:
    一.execl数据驱动
    六.对XML文件的读取
    电脑远程控制的几种方式
    单元测试、集成测试、系统测试区别
    Jmeter简单的压力测试
    Python+selenium 定位非select类型的下拉框和定位时间控件
    fiddler(二)工具栏常用功能
    web自动化中,界面元素定位不到如何解决
    Fiddler (一)介绍
    Fiddler (四) 实现手机的抓包
  • 原文地址:https://www.cnblogs.com/wdcwy/p/4967598.html
Copyright © 2011-2022 走看看