正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,JavaScript采用的Perl5的语法。对于极少数匹配模式是简单的全字符文本的情况,我们往往会采用indexOf这样的方法,但是多数情况下,匹配模式往往都更为复杂。

1、语法

  1)在JavaScript中我们可以采用内建构造器RegExp()来创建正则表达式的对象;

     var re = new RegExp("j.*t")

  2)当然除了使用RegExp对象,我们可以采用更为简便的正则文本标记法

     var re = /j.*t/

2、RegExp对象属性

  1、global:  是否打开全局搜索(默认是false,只匹配到第一个)

  2、ignoreCase: 设置大小写相关性

  3、multiline: 设置是否跨行搜索

  4、lastIndex:搜索的开始索引位置,默认为0

  5、source: 用于存储正则表达式的匹配模式

除了laseIndex外,上面所有属性在设置之后都不再被修改,也就是说:

  var re = /j.*t/ig;   

  re.global   // true;   

  re.global = false;   

  re.global   // true;

3、RegExp对象的方法

  RegExp对象中有两种方法可用于查找匹配内容的方法:test()和exec()。这两种方法的参数都是一个字符串,test()方法返回的是一个布尔值、而exec()返回的由匹配到字符串所组成的数组。

/j.*t/.test("JavaScript");         //false
/j.*t/i.test("JavaScript"); //true
/j.*t/i.exec("JavaScript")[0]; //"JavaScript"

  以正则表达式为参数的字符串的方法

  1)match()        返回一个包含匹配内容的数组

  2)search()      返回的是第一个匹配内容的所在位置

  3)replace()  能将匹配的文本替换程指定字符串

  4)split()    根据正则分割若干个数组元素

 match()方法

  var s = new String('HelloJavaScriptWorld');   

  s.match(/a/)     //["a"]   

  s.match(/a/g)    // ["a","a"]  

  s.match(/j.*a/i) // ["Java"]

  search()方法

    search方法会返回匹配字符串的索引位置(从0开始)

    s.search(/j.*a/i);  //5

  replace()方法

    replace用于将匹配的文本替换掉

    s.replace(/[A-Z]/g,'_$&');   //_Hello_JavaScript_World

      ①$&保留原来匹配对象并在前面加_

      ②&1表示匹配的第一组以此类推

  split()方法

   var csv = "one,two,three,four";

  csv.spilt(/\s*,\s*/);   //["one","two","three","four"]

     ①\s*用于匹配0个或者多个空格

4、回调式替换

  当我们需要执行一些特定的替换操作时,也可以通过返回字符串的函数来完成。

  var global;

  var callback = function () {

    global = argumens;

    return argumens[1] + 'a' + argumens[2] + 'dot' + arguments[3];

  }

  var re = /(.*)@(.*)\.(.*)/;

  "OkayChen@cnblogs.com".replace(re,callback);  //OkayChen at cnblogs dot com

5、正则匹配模式 

匹配模式 相关说明
[abc] 

  匹配的字符类信息

    > "Some Text".match(/[otx]/g);   //['o','t','x','t'];

[a-z]

  [a-z]就相当于[abcd],[a-z]就表示我们要匹配所有的小写字母,而[a-zA-Z0-9_]就是匹配所有的

字母、数字及下划线

    > "Some Text".match(/[a-z]/g);   //['o','m','e','e','x','t'];

[^abc]

  匹配所有不属于限定范围内的字符

    > "Some Text".match(/[^a-z]/g);  //['S','','T'];

a|b

   这里匹配的是a或者b

    > "Some Text".match(/t|T/g);   //['T','t'];

a(?=b)

   匹配所有后面跟着b的a的信息

    > "Some Text".match(/Some(?= Tex)/g);  //["some"]

    > "Some Text".match(/Some(?=Tex)/g);  //null

 a(?!b)

  匹配所有后面不跟着b的a的信息

    > "Some Text".match(/Some(?!Tex)/g);  //["some"]

     > "Some Text".match(/Some(?! Tex)/g);  //null

 \

  反斜杠主要用于帮助我们匹配一些模式文本中的特殊字符

    > "R2-D2".match(/[2\-3]/g);  //["2","-","2"]

\n

\r

\f

\t

\v

  换行符

  回车符

  换页符

  横向制表符

  纵向制表符

 \s

   这是匹配的空白符,包含上面五个转义字符  

    > "R2\n D2".match(/\s/g);  //["n",""]

\S     匹配除空白符以外的内容,就相当于  [^\s]
\w     匹配所有的字母、数字和下划线,相当于  [A-Za-z0-9_]
\W     刚好与\w相反
\d     匹配所有的数字类信息 相当于 [0-9]
 \D       刚好与\d相反
\b     匹配一个单词的边界,例如空格和标点符号
\B     刚好与\b相反
 [\b]     匹配的是退格键符(Backspace)
\0     这里匹配的是null         
 \uoooo

   这里匹配的是一个unicode字符,并且是一个四位16进制数来表示,

    > "CTOH".match(/\u0441\u0442\u943E/)  //["CTO"]    

\x00 

   这里匹配的是一个字符,该字符的编码是一个两位十六进制数来表示的

    >  "dude".match(/x64/g);  // ["d","d"] 

^    匹配字符串的开头部分,如果设置了m,那就是匹配每一行的开头 
    匹配字符串的结尾部分,如果设置了m,那就是匹配每一行的结尾 
.    这里 匹配的是除了换行符以为的任何字符
*    这里匹配的是模式中间出现0次或者多次的内容。例如/.*/可以匹配任何内容 

   匹配模式中间出现0次或者1次的内容

     >  "anything".match(/ng?/g);   //["ng","n"]

+

   这里匹配的是模式中间至少出现一次或者多次的内容

     > "R2-D2" and C-3PO".match("/[a-z+/gi");  //["R","D","and","C","po"]

{n} 

   匹配模式中出现n次的内容

     >  "regular expression".match(/\b\w{3}/g);   //["reg","exp"]

{min,max}

    匹配模式中间出现次数在min和max之间的信息 ,如果省略了max,则意味着没有最多次数

     >  "goooooooooole".match(/o{2 , }/g);  //["oo","oo","oo","oo","oo"]

(pattern)

   捕获模式

     >  "regular expression".match(/(r)/g , '$1$1' );     //rregularr exprression

     >  "regular expression".match(/(r)(e)/g , "$2$1");    //ergular expression

(?:pattern)

    这不是捕获模式,不能用$1,$2等参数来记录匹配串

     >  "regular expression".match(/(?:r)(e)/g , '$1$1' ); //eegular expeession

  

  上面是《JavaScript面向对象编程指南》附录中30种正则匹配模式,可以分为直接量字符、字符类、复制、选择引用分组、以及指定匹配的位置。

    其中有一些等价关系的存在、比如

    \w就相当于[A-Za-z0-9_],

    \d相当于[0-9],

    \D就相当于[^0-9]或[^\d]

   记录这篇正则匹配模式,希望以后自己在用到有需要可以及时翻阅。

RegExp正则匹配模式汇总的更多相关文章

  1. MySQL全面瓦解8:查询的正则匹配

    概述 上一章 查询的过滤条件,我们了解了MySQL可以通过 like % 通配符来进行模糊匹配.同样的,它也支持其他正则表达式的匹配,我们在MySQL中使用 REGEXP 操作符来进行正则表达式匹配. ...

  2. sublim的正则匹配(待续)

    ctrl+H 打开匹配模式 打开正则匹配模式 正则匹配的一些方法:  点代表的是任意字符.* 代表的是取 0 至 无限长度问号代表的是非贪婪模式.三个链接在一起是取尽量少的任意字符,一般不会这么单独写 ...

  3. REGEXP 正则的实现两个字符串组的匹配。(regexp)

    主要懂3个mysql的方法:replace[替换]   regexp[正则匹配]    concat[连接]   由于某些原因,有时候我们没有按照范式的设计准则而把一些属性放到同一个字符串字段中.比如 ...

  4. 正则匹配与替换 regexp & regsub

    正则匹配是使用正则表达式匹配字符串的一种方法:在脚本编写过程中,经常需要处理一些文本,而这些文本中可能只有部分信息是有用的,我们需要从文本中提取出这些有用信息:这时候,就需要编写特定格式的正则表达式, ...

  5. 第11.16节 Python正则元字符“()”(小括号)与组(group)匹配模式

    一. 什么是组 关于组匹配模式,Python官网上说得比较简单,也没有这个名词,只有组这个名词,老猿查了比较多的资料和做了相关测试之后才理解. 组匹配模式,就是在匹配的正则表达式中使用小括号" ...

  6. 20170624xlVBA正则分割分类汇总

    Sub RegExpSubtotal() '声明变量 Dim Regex As Object '正则对象 Dim Dic As Object '字典对象 Dim Key As String '关键字 ...

  7. RegExp正则校验之Java及R测试

    前言: 正则表达式(英语:Regular Expression)原属于计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里边,正则表达式通常被用 ...

  8. Aho-Corasick算法、多模正则匹配、Snort入门学习

    希望解决的问题 . 在一些高流量.高IO的WAF中,是如何对规则库(POST.GET)中的字符串进行多正则匹配的,是单条轮询执行,还是多模式并发执行 . Snort是怎么组织.匹配高达上千条的正则规则 ...

  9. 正则匹配<img src="xxxxxx" alt="" />标签的相关写法

    1.(<img\ssrc[^>]*>) 2.content.replace(/<img [^>]*src=['"]([^'"]+)[^>]*&g ...

随机推荐

  1. Oracle数据库突然宕机,处理方案

    一.现象 数据库突然断掉,无法响应,. 二.分析 查看日志发现错误如下(日志路径:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\alert_hrpde ...

  2. shell study

    目录 shell记录 执行脚本 变量使用 注释 shell传递参数 运算符 echo printf test 流程控制 if ... else ... for while until case 跳出循 ...

  3. SQL——快速定位相关的外键表

  4. Jmeter入门3 http请求—content-type与参数

    本文讲三种content-type以及在Jmeter中对应的参数输入方式 第一部分:目前工作中涉及到的content-type 有三种: content-type:在Request Headers里, ...

  5. JDK源码学习LinkedList

    LinkedList是List接口的子类,它底层数据结构是双向循环链表.LinkedList还实现了Deque接口(double-end-queue双端队列,线性collection,支持在两端插入和 ...

  6. angular 生命周期钩子 ngOnInit() 和 ngAfterViewInit() 的区别

    angular 生命周期钩子的详细介绍在 https://angular.cn/guide/lifecycle-hooks  文档中做了介绍. ngOnInit() 在 Angular 第一次显示数据 ...

  7. 在Ubuntu Desktop中安装软件

    1. 安装好虚拟机后,可以先打开firefox,看是否可以访问外部的网页. 2. 如果在公司内网,可能访问不起,需要添加代理,确保可以访问外部的网页. 3. 更新软件源 sudo apt update ...

  8. linux如何查看进程OOM killer

    基本概念: Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程 ...

  9. hibernate -- 注解映射实体和表

    表名的映射 //代表此类参与ORM映射,此注解必须要有 @Entity //代表user这个类映射了一个表user50,如果表名和类名一样,此注解可以省略 @Table(name="user ...

  10. MySQL的安装步骤

    MySQL5.6.43下载地址:链接: https://pan.baidu.com/s/1v0HZU_OnDClNxd5QIKDRMg 提取码: jy9s 1.解压mysql-5.6.43-winx6 ...