zoukankan      html  css  js  c++  java
  • [技术学习]js正则表达式汇总

    一、常用正则表达式关键字

    ".":任意字符
    "*":任意个数
    "+":任意个数,至少一个
    "?":0-1个
    "d":任意个数数字,至少一个 digit
    "w":任意数字字母,下划线 word
    "s":任意空白,空格,tab,换行符,至少一个 space
    :转义符
    []:匹配一些字符
    -:例如0-5,从几到几
    ^:任意的非字符
    S:所有非空白
    {4}:字符出现次数等4
    {2,4}:字符出现2-4次
    {2,}:至少2个
    $:字符串的边界
    :单词的边界,前边界或者后边界
    ^和$一起使用,是匹配最初和最后
    (|)正则表达式分组
    1反向引用,正则表达式记住的部分
    (?=s) 断言的语法,匹配左侧或者右侧,符合条件的

    二、js中正则表达式使用的常用语法:

      上述例子为正则表达式的一种常用方式,正则表达式在js中主要使用场景为:

      1、test:校验字符串是否符合要求格式,主要在验证时候使用,关键字为pattern.test(str),返回结果为true,或者false

    var pattern=/^d+$/; //定义正则表达式
    var str=123; //定义字符串
    alert(pattern.test(str)) //使用正则表达式校验字符串

      2、exec:获取字符串中与正则表达式匹配的内容

            var pattern=/^(?:s*(<[wW]+>)[^>]*|#([w-]*))$/; //正则表达式,匹配以空格开始,带有<>标签的内容
            var str='  <aa> #ab' //测试字符串
            alert(pattern.exec(str)) ;//<aa> #ab,<ab>,

      根据()进行分组,匹配结果为一个数组a[],a[0]为最长匹配到的字符串,a[1]为第一个数组,a[2]为第二个小括号匹配的内容,依次类推,如果某个小括号内的匹配不显示到数组中,需要加?:进行过滤,具体含义参考?:的用法。

      3、replace:对数据进行局部或者全局替换

            var str='8google8 8google8 8google8';
            var pattern=/8(.*)8/; //贪婪模式,匹配到的为整个字符串 <strong>google8 8google8 8google</strong> 
            var pattern=/8(.*?)8/; //非贪婪模式,替换结果为<strong>google</strong> 8google8 8google8
            var pattern=/8(.*?)8/g; //非贪婪模式,g表示全局替换,结果为<strong>google</strong> <strong>google</strong> <strong>google</strong> 
            alert(str.replace(pattern,'<strong>$1</strong>'));

      将字符串匹配部分替换为为指定的字符串,其中可以根据分组,使用$1..保留源字符串的部分内容。

      4、match,与exec使用方法类似,不过exec是正则的方法,match是str的方法,因此使用上为str.match(pattern),其他区别如下例子:

    var str='once two three';
    var pattern=/S+/g;//全局匹配的正则
    alert(str.match(pattern))//结果为一个数组,one,two,three
    alert(pattern.exec(str))//匹配结果为one

      5、search,使用

    /*使用search 来查找匹配数据*/
    var pattern = /box/ig;
    var str = 'This is a Box!,That is a Box too';
    alert(str.search(pattern)); //查找到返回位置,否则返回-1

      6、split

    /*使用split 拆分成字符串数组*/
    var pattern = / /ig;
    var str = 'This is a Box!,That is a Box too';
    alert(str.split(pattern)); //将空格拆开分组成数组

    三、几个重要概念

      1、贪婪模式和非贪婪模式

      在正则表达式匹配过程中,默认匹配最多的字段,例如以/8.*8/进行匹配'8google8 8google8 8google8',由于.*可以匹配任意字符串,所以默认为以收尾为8除去后,匹配尽可能多的要素,所以结果为'8google8 8google8 8google8',如果要改为遇到第一个8就截止,则需要改为/8.*?8/,表示不贪婪,匹配结果为8google8。

      在设计模式中类比单例模式的饿汉模式和懒汉模式,饿汉就是很饥饿,尽可能多的需要食物,懒汉就是直到需要的时候,才去申请食物。

      2、锚字符

      在正则表达式有些特殊字符,有具体的含义

      ^:表示此次匹配必须从行首开始匹配

      $:此次匹配的结尾必须与行尾匹配

      :匹配字符串边界,以下表达式可以匹配'google aaa',但无法匹配’googleaaa'

            var str= "google aaa" ;
            var pattern=/google/
            alert(pattern.test(str))

      3、正则表达式分组概念

      在正则表达式中,可以使用()进行分组,分组在exec,match等函数中会返回匹配到的整个字符串和分组的情况,使用$1或者1等可以获取某个指定分组

      4、可选修饰词 /w/igm

      i 忽略大小写
      g 全局匹配
      m 多行匹配

      5、问号"?"的使用,问号作为正则表达式特殊字符有以下几种使用方法:

        5.1:当做真实问号使用    ?

        5.2:表示0次或1次    w? 表示0-1次字符

        5.3:表示非贪婪模式, w*? 表示非贪婪的匹配任意多个字符

        5.4:表示非捕获?:,goo(?:.*)8 使用exec等捕获时.*内容不会作为单独分组

        5.5 表示前瞻捕获?=  goo(?=gle)  //goo 后面必须跟着gle 才能捕获

        举一个极端的例子 

            var str= "gaoo?gle aaa" ;
            var pattern=/(?:ga??oo?(?=gle))/ //此正则中有五个问号,含义各不相同:1、整个分组不会被捕捉,2、表示g后又0个或者1个a,3表示对a采用非贪婪匹配4、表示匹配实际的?号,5表示整个匹配获取必须以gle结尾,但又不包括gle
            alert(pattern.exec(str)) //匹配结果:gaoo?
  • 相关阅读:
    java数组
    java 常用类
    java 集合(一)
    mysql相关操作(一)
    记录java BigDecimal
    hxg-yw
    一个困惑我好久的问题
    关于重载和重写的一些小知识
    几个常用的HTTP状态码
    死锁产生的原因和条件简述
  • 原文地址:https://www.cnblogs.com/jyyzzjl/p/5016898.html
Copyright © 2011-2022 走看看