直接量语法

/pattern/attributes

创建 RegExp 对象的语法:

new RegExp(pattern, attributes);

一、attributes:

修饰符

描述

i

执行对大小写不敏感的匹配。

g

执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。若不含g,则默认找到第一个匹配后停止

m

执行多行匹配。

二、pattern:

  1. 方括号:查找某个范围的字符

表达式

描述

[abc]

查找方括号之间的任何字符。方括号内是"或"的关系

[^abc]

查找任何不在方括号之间的字符。

[0-9]

查找任何从 0 至 9 的数字。

[a-z]

查找任何从小写 a 到小写 z 的字符。

[A-Z]

查找任何从大写 A 到大写 Z 的字符。

[A-z]

查找任何从大写 A 到小写 z 的字符。

[adgk]

查找给定集合内的任何字符。

[^adgk]

查找给定集合外的任何字符。

(red|blue|green)

查找任何指定的选项。

  1. 元字符:拥有特殊含义的字符

元字符

描述

.

查找单个字符,除了换行和行结束符。

\w

查找单词字符。

\W

查找非单词字符。

\d

查找数字。

\D

查找非数字字符。

\s

查找空白字符。

\S

查找非空白字符。

\b

匹配单词边界。

\B

匹配非单词边界。

\0

查找 NUL 字符。

\n

查找换行符。

\f

查找换页符。

\r

查找回车符。

\t

查找制表符。

\v

查找垂直制表符。

\xxx

查找以八进制数 xxx 规定的字符。

\xdd

查找以十六进制数 dd 规定的字符。

\uxxxx

查找以十六进制数 xxxx 规定的 Unicode 字符。

  1. \b

    匹配的单词边界并不包含在匹配中,即匹配的单词边界的长度为零

    例子:

    /\bm/ 匹配 "moon" 中的 'm';

    /oo\b/ 不匹配 "moon" 中的 'oo',因为 'oo' 后面的 'n' 是一个单词字符;

    /oon\b/ 匹配 "moon" 中的 'oon',因为 'oon' 位于字符串的末端,后面没有单词字符;

    /\w\b\w/ 不匹配任何字符,因为单词字符之后绝不会同时紧跟着非单词字符和单词字符。

  2. \B

    匹配位置的上一个和下一个字符的类型是相同的:即必须同时是单词,或必须同时是非单词字符。字符串的开头和结尾处被视为非单词字符。匹配位置的长度为0

    例如:/\B../ 匹配 "noo" 中的 'oo'(\B的位置在n和o之间,左边n,右边o,都是单词字符)

    /y\B./ 匹配 "possibly yesterday." 中的 'ye'。

  1. 量词

量词

描述

n+

匹配任何包含至少一个 n 的字符串。

n*

匹配任何包含零个或多个 n 的字符串。

n?

匹配任何包含零个或一个 n 的字符串。(区别:n+ 一个或多个,n* 零个或多个,n? 零个或一个)

n{X}

匹配包含 X 个 n 的序列的字符串。

n{X,Y}

匹配包含 X 或 Y 个 n 的序列的字符串。

n{X,}

匹配包含至少 X 个 n 的序列的字符串。

n$

匹配任何结尾为 n 的字符串。

^n

匹配任何开头为 n 的字符串。

?=n

匹配任何其后紧接指定字符串 n 的字符串。

?!n

匹配任何其后没有紧接指定字符串 n 的字符串。

  1. n+

    例1:

    /o/g匹配"Hellooo World!"中的o,o,o,o

    /o+/g匹配"Hellooo World!"中的ooo,o

    例2:

    /lo/g匹配"Hellooo World! Hello W3School!"中的lo,lo

    /lo+/g匹配"Hellooo World! Hello W3School!"中的looo,lo(lo+匹配一个1后面跟一个或多个o)

    /(lo)+/g匹配"Hellololo World! Hello W3School!"中的lololo,lo((lo)+匹配一个或多个lo的组合)

    例2:

    /\w/g匹配"Hellooo World!"中的H,e,l,l,o,o,o,W,o,r,l,d

    /\w+/g匹配"Hellooo World!"中的Hellooo,World

  2. n{X,Y}

    例1:

    /\d{3,4}/g匹配"100, 1000 or 10000?"中的100,1000,1000

  3. n{X,}

    例1:

    /\d{3,}/g匹配"100, 1000 or 10000?"中的100,1000,10000

  4. n$

    例:

    /is$/g匹配"Is this his"

  5. ?=n

    例:

    /is(?= all)/g匹配"Is this all there is"(注意:?=和all之间有空格)

  6. ?!n

    例:

    /is(?! all)/g匹配"Is this all there is"

  1. 贪婪模式与非贪婪模式
    1. 贪婪模式

      在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如:"{m,n}", "{m,}", "?", "*", "+",具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配

      例1:

      表达式 "<td>(.*)</td>" 与字符串 "<td><p>aa</p></td><td><p>bb</p></td>" 匹配。

      例2:

      针对文本 "dxxxdxxxd"

表达式

匹配结果

(d)(\w+)

"\w+" 将匹配"dxxxdxxxd"

(d)(\w?)

整个将匹配"dxxxdxxxd"

(d)(\w+)(d)

"\w+" 将匹配"dxxxdxxxd"

虽然 "\w+" 也能够匹配上最后一个 "d",但是为了使整个表达式匹配成功,

"\w+" 可以 "让出" 它本来能够匹配的最后一个 "d"

由此可见,"\w+" 在匹配的时候,总是尽可能多的匹配符合它规则的字符。

虽然第二个举例中,它没有匹配最后一个 "d",但那也是为了让整个表达式能够匹配成功。

同理,带 "*" 和 "{m,n}" 的表达式都是尽可能地多匹配,带 "?" 的表达式在可匹配(1)可不匹配(0)的时候,也是尽可能的 "要匹配"。这种匹配原则就叫作 "贪婪" 模式 。

  1. 非贪婪模式

    在修饰匹配次数的特殊符号后再加上一个 "?" 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的 "不匹配"。这种匹配原则叫作 "非贪婪" 模式,也叫作 "勉强" 模式。如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功。

    例1:

    表达式 "<td>(.*?)</td>" 与字符串 "<td><p>aa</p></td><td><p>bb</p></td>" 匹配。

    例2:

    针对文本 "dxxxdxxxd"

表达式

匹配结果

(d)(\w+?)

"\w+?" 将匹配"dxxxdxxxd"

(d)(\w??)

整个将匹配"dxxxdxxxd"

(d)(\w+?)(d)

"\w+?" 将匹配"dxxxdxxxd"

为了让整个表达式匹配成功,"\w+?" 不得不匹配 "xxx" 才可以让后边的 "d" 匹配。

  1. 捕获组与反向引用
    1. 捕获组:用元字符()表示,小括号包含的表达式所匹配到的字符串可以通过RegExp的构造函数属性单独获取
    2. 反向引用:
      1. 小括号包含的表达式所匹配到的字符串不仅是在匹配结束后才可以使用,在匹配过程中也可以使用,表达式后边的部分,可以引用前面小括号内的子匹配已经匹配到的字符串。
      2. 引用方法是 "/" 加上一个数字。"/1" 引用第1对括号内匹配到的字符串,"/2" 引用第2对括号内匹配到的字符串……以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号 "(" 在前,那这一对就先排序号。
      3. 例子:

        例1:

      表达式 /('|")(.*?)(/1)/

      匹配模式说明:

      第一个捕获组表示匹配一个单引号或双引号,

      第二个捕获组表示匹配任意一个字符至少0个,问号表示的是采用非贪婪模式,

      第三个捕获组表示反向引用第一个捕获组,即匹配一个单引号或双引号

      在匹配 "'Hello', \"World\"" 时(需将内部双引号转义),匹配结果是:成功;

      匹配到的内容是:'Hello'。再次匹配下一个时,可以匹配到 "World"。

      例2:

      表达式 /(\w)\1{4,}/

      匹配模式说明:第一个捕获组表示匹配一个单词字符,然后使用\1反向引用第一个捕获组,同样表示匹配一个单词字符,

      又通过后面的数量{4,},约束至少4个,

      整个匹配模式就是匹配第一个单词字符+后面4个单词字符,至少5个单词字符,如果存在则成功。

      在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 时,匹配结果是:成功;匹配到的内容是 "ccccc","999999999"。

      例3:

      表达式 /<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?</\1>/

      匹配模式说明:

      表达式中有4个捕获组:(\w+)、(\w+(=('|").*?\4)?\s*)、(=('|").*?\4)、('|"),

      反向引用使用了两次,第一次反向引用捕获组4,第二次反向引用捕获组1,

      整个模式含义: 1、匹配一个左尖括号

      2、第一个捕获组,匹配单词字符1到多个

      3、匹配空白字符,0到多个

      4、进入第二个捕获组,先匹配单词字符1到多个

      5、进入第三个捕获组,先匹配一个=号

      6、进入第四个捕获组,匹配一个单引号或一个双引号

      7、然后第三个捕获组继续匹配,匹配任意字符0到多个,采用非贪婪模式,尽量少匹配

      8、然后反向引用第四个捕获组的结果,即执行第6步的结果

      9、回到第二个捕获组继续匹配,?表示第三个捕获组匹配的结果个数为0或1个,然后再匹配一个空白字符0到多个

      10、而第二个捕获组匹配的结果个数为0到多个

      11、然后匹配一个右尖括号,后面是一个任意字符个数为0到多个,采用非贪婪模式,

      尽量少匹配,再后面是一个左尖括号和正斜杠

      12、正斜杠后面反向引用第一个捕获组的结果,即执行第二步的结果

      13、最后是一个右尖括号

      在匹配 "<td id='td1' style="bgcolor:white"></td>" 时,匹配结果是成功。

      如果 "<td>" 与 "</td>" 不配对,则会匹配失败;如果改成其他配对,也可以匹配成功。

匹配……的字符串:只要整个字符串中有匹配的字符,不管匹配位置在哪,都算匹配成功。即test方法返回true

区分:此二者不同,前者是贪婪模式的特殊符号,后者是非贪婪模式的专用符号

RegExp类型(正则表达式)的更多相关文章

  1. JavaScript引用类型之RegExp类型(正则表达式)

    ECMAScript中使用RegExp来支持正则表达式.使用下面类似Perl的语法,就可以创建一个正则表达式. var expression=/pattern/flags; 如上代码: pattern ...

  2. 引用类型-RegExp类型

    JavaScript高级程序设计(第三版)笔记-第五章-RegExp类型 定义正则表达式有两种方式 1.用字面量形式定义正则表达式: ver expression = /patterns/flags; ...

  3. RegExp类型exec()方法的返回值说明

    之前看别人写的插件经常会用到RegExp对象来验证输入,并且获取一些那时我并不晓得是什么东西的数组,来取值进行自定义的逻辑处理.今天学习了一下RegExp类型.终于有了一个初步的了解,至少不会看一会就 ...

  4. RegExp类型,单体内置对象

    1.RegExp类型:  1)什么是正则表达式:RegExp    --是一种规则,模式    --强大的字符串匹配工具    --创建:    --使用RegExp构造函数创建:var re=new ...

  5. js中RegExp类型

    ECMAScript通过RegExp类型来支持正则表达式. var expression = / pattern / flag ; pattern可以是任意的正则表达式.每个正则都带有标志,用以正则表 ...

  6. 5.4 RegExp类型

    ECMAScript通过RegExp类型来支持正则表达式.使用下面类似Perl的语法,就可以创建一个正则表达式. var expression=/pattern/flags; 复制代码 其中的模式(p ...

  7. 《JavaScript高级程序设计》读书笔记 ---RegExp 类型

    ECMAScript 通过RegExp 类型来支持正则表达式.使用下面类似Perl 的语法,就可以创建一个正则表达式.var expression = / pattern / flags ; 其中的模 ...

  8. Javascript高级编程学习笔记(15)—— 引用类型(4)RegExp类型

    JS中处理字符串最常用的应该就是正则了 同样正则(RegExp)类型也是JS中引用类型的一种 ECMAScript通过 RegExp类型 来支持正则表达式 创建正则 var expression = ...

  9. 随笔记录--RegExp类型

    阅读Javascript高级程序设计第五章 -- RegExp类型总结 对于基础教程部分, 有小伙伴不熟悉的,可以参考 正则表达式 - 教程 1. 基础部分回顾: ECMASript通过RegExp类 ...

  10. asp的RegExp对象正则表达式功能用法

    RegExp对象提供简单的正则表达式支持功能. RegExp对象的用法: 以下为引用的内容: Function RegExpTest(patrn, strng) Dim regEx, Match, M ...

随机推荐

  1. 基于canvas和jsp的头像剪辑上传

    最近在做项目时候需要一个头像长传功能,但是现在照片动不动就几兆的,都是流量的浪费. 我只是简单想要上传一个头像而已... 经过几天发愤图强..总算是略有所获.. 基本思路: 1.html部分,图片剪辑 ...

  2. python实现多变量线性回归(Linear Regression with Multiple Variables)

    本文介绍如何使用python实现多变量线性回归,文章参考NG的视频和黄海广博士的笔记 现在对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为( x1,x2,..., ...

  3. Xamarin组件包 Xamarin.ToolKit

    一  简介 Xamarin.ToolKit是个人在使用xamrin.froms开发2年中,因实际项目需要所自定义的组件包.该组件包采用xamarin.froms方式封装,用户可像普通forms控件那样 ...

  4. git clone 远程仓库报错error setting certificate verify locations

    系统:windows10 今天从github上克隆项目时报错: 原因: 1.git配置没有修改 之前配置的是公司gitlab账号的信息,和我当前要克隆的github的配置信息不同,没有注意修改 2.执 ...

  5. (三) Angular2项目框架搭建心得

    前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2 ...

  6. css居中问题

    学习过程中遇到css居中问题 , 也查阅了资料,每个人的方法都不尽相同,而且当时看懂了,过后就记混淆了;so作为一个前端小白,也来写一下俗话说好脑子不如烂笔头,毕竟自己知道的也不多,其实是抱着学习和交 ...

  7. GridControl 设置自带选中复选框及设置该列列头名称

    2.设置该列标题,设置事件CustomDrawColumnHeader 效果图:

  8. BZOJ 4086: [Sdoi2015]travel(SDOI2015 round2 day1)(分类讨论+容斥原理)

    描述:给定一张图(n<1000,m<5000)求有多少点对u,v有不重复经过其他点,共经过k个点的路径.(k<=7) 这个做法应该不是正解吧..顺便说下SDOI的几道题在BZ上都要卡 ...

  9. Java Web(七) JSTL标签库

    在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为.行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,它 ...

  10. 每天一个linux命令(44)--ss命令

    ss 是 socket statistics 的缩写.顾名思义,ss 命令可以用来获取socket 统计信息,它可以显示和netstat 类似的内容.但 ss 的优势在于它能够显示更多更详细的有关TC ...