正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,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. springmvc常用的组件,注解,跳转

    路径映射 XXXHandlerMapping 随开发配置越来越多 注解到java代码中来简化xml配置 请求到哪个Controller 控制器bean Controller 随着开发配置越来越多 注解 ...

  2. 禁用loop back check

    在sharepoint 2013 服务器上,如果修改了AAM (alternate access mappings), 在服务器上访问本地的sharepoint就会一直弹出登陆窗口,无法访问. 于是必 ...

  3. 在windows下的hdfs客户端编写

    在windows下的hdfs客户端编写 新建一个工程,右键 properties -> java build path -> libraries 和之前一样的操作,这次 new 一个 us ...

  4. Qimage QBuffer

    QImage image;QByteArray ba;QBuffer buffer(&ba);buffer.open(QIODevice::WriteOnly);image.save(& ...

  5. PHP设计模式系列 - 工厂模式

    工厂模式 提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤. 工厂模式 实际上就是建立一个统一的类实例化的函数接口.统一调用,统一控制. 工厂模式是php项目开发中,最常用的设计 ...

  6. JavaScript的DOM操作获取元素周边大小

    一.clientLeft 和 clientTop 这组属性可以获取元素设置了左边框和上边框的大小,目前只提供了 Left 和 Top 这组,并没有提供 Right 和 Bottom. <scri ...

  7. 算法题:整形数组找a和b使得a+b=n

    题目: 数组 A 由 1000 万个随机正整数 (int) 组成,设计算法,给定整数 n,在 A 中找出 a 和 b,使其符合如下等式: n = a + b 解题思路: 1. 1000w个随机正整数占 ...

  8. shell基础--shell特殊变量

    一.变量列表 二.实验 系统:centos 7 1.特殊变量 [root@~_~ day2]# cat p.sh #!/bin/bashecho '$0:'$0echo '$*:'$*echo '$@ ...

  9. luogu P3391 【模板】文艺平衡树(Splay)

    嘟嘟嘟 突然觉得splay挺有意思的-- 这道题只有一个任务:区间翻转. 首先应该知道的是,splay和线段树一样,都可以打标记,然后走到每一个节点之前先下传. 那怎么打标记呢?还应该有"区 ...

  10. 【转】 Android中selector的使用

    引言 selector中文的意思选择器,在Android中常常用来作组件的背景,这样做的好处是省去了用代码控制实现组件在不同状态下不同的背景颜色或图片的变换.使用十分方便. selector的定义 s ...