正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,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. 搭建企业级NFS网络文件共享服务[二]

    1.1.8 NFS问题总结 1.问:使用showmount -e 127.0.0.1后报clnt_create: RPC: Program not registered错误 答:顺序不对,重启nfs服 ...

  2. Squid安装配置和使用

    文:铁乐与猫 环境 centos 6.5 x64 安装 最简单的一种就是yum安装. yum install squid 版本 rpm -qa | grep squid squid-3.1.23-16 ...

  3. app数据加密方法

    由于项目涉及到注册和登录,所以我了解一下现在app使用比较广泛的几种密码加密方法,可以当作参考,以下都是在python3.5的环境下使用这些算法的例子. 1.base64 Base64是一种基于64个 ...

  4. 【原创】python requests 库底层Sockets处于close_wait状态

    以前对于Requests库只是简单是使用,在现在公司的后台中,有多个接口是直接使用requests.get .post之类的方法来做的,进行过一段时间的压力测试,发现性能低的可怜,且linux服务器有 ...

  5. taskset

    常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源: 这个时候我们就可以把一些不太重要的比如co ...

  6. Ext 向Ext.form.ComboBox()中添加列表的分类

    1.静态 [javascript] view plaincopy var staticComboBox = new Ext.form.ComboBox({   fieldLabel:'回访结果',   ...

  7. python第十六课——ascii码

    2.ascii码 美国设计出来的一张编码表,将涉及的字符都编号了,底层仍然还是进行二进制的运算: 记住:3个范围段 1).'0' --> 码值:48 2).'A' --> 码值:65 3) ...

  8. 【转】iOS:AvPlayer设置播放速度不生效的解决办法

    现象: 项目有一个需求是实现视频的慢速播放,使用的是封装的AvPlayer,但是设置时发现比如设置rate为0.5,0.1,0.01都是一样的速度,非常疑惑.后来经过查找资料,发现iOS10对这个AP ...

  9. CVE-2017-8046 复现与分析

    环境搭建 使用的项目为https://github.com/spring-guides/gs-accessing-data-rest.git里面的complete,直接用IDEA导入,并修改pom.x ...

  10. django restframework 简单总结

    官方文档:http://www.django-rest-framework.org/ model.py class Snippet(models.Model): created = models.Da ...