一、创建正则表达式的方法

1.字面量形式

var expressiion=/pattern/flags;

flags:g全局模式,即将被应用于所有字符串,而非在发现第一个匹配项时立即停止;

i不区分大小写模式;

m多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。

模式中所有的元字符都必须转义。元字符有:([{\^$|)?*+.]}

2.RegExp构造函数

接收两个参数:要匹配的字符串模式,可选的标志字符串

var pattern2=new RegExp('[bc]at','i');

由于RegExp构造函数的模式参数是字符串,所以某些情况下要对字符进行双重转义。所有元字符都必须双重转义,那些已经转义过的字符也是如此,

例如/\[bc\]at/  字符串中:\\[bc\\]at

二、RegExp实例属性

RegExp的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。

global:是否设置了g标志;

ignoreCase:是否设置了i标志;

lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起;

multiline:布尔值,表示是否设置了m标志;

source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

var pattern1=/\[bc\]at/i;

alert(pattern1.lastIndex)//0;

alert(pattern1.source)//  \[bc\]at

var pattern2=new RegExp('\\[bc\\]at','i');

alert(pattern2.lastIndex)//0;

alert(pattern2.source)//   \[bc\]at;

三、实例方法

1.exec() 专为捕获组而设计的。接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。返回的数组虽然是Array的实例,但包含两个额外的属性:index,input。index表示匹配项在字符串中的位置,而input表示应用正则表达式的字符串。在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。

var test='I and mom and dad and baby';

var pattern=/mon(and dad( and baby)?)?/gi;

var matches=pattern.exec(test);

alert(matches.index);//6

alert(matches.input);//I and mom and dad and baby

alert(matches[0]);//mom and dad and baby

alert(matches[1]);// and dad and baby

alert(matches[2]);// and baby

对于exec()方法而言,即使在模式中设置了全局标志(g),它每次也只会返回一个匹配项。在不设置全局标志的情况下,在同一个字符串上多次调用exec()将始终返回第一个匹配项的信息。而在设置全局标志的情况下,每次调用exec()则都会在字符串中继续查找新匹配项。

var text='cat, bat, sat, fat';

var pattern1=/.at/;

var matches=pattern1.exec(text);

alert(matches.index)//0

alert(matches[0])//cat

alert(pattern1.lastIndex)//0

matches=pattern1.exec(text);

alert(matches.index)//0

alert(matches[0])//cat

alert(pattern1.lastIndex)//0

var pattern2=/.at/g;

var matches=pattern2.exec(text);

alert(matches.index)//0

alert(matches[0])//cat

alert(pattern2.lastIndex)//3

matches=pattern2.exec(text);

alert(matches.index)//5

alert(matches[0])//bat

alert(pattern2.lastIndex)//8

while(matches=pattern2.exec(text)){
alert("index:"+matches.index)

alert("matches[0]:"+matches[0])

alert("pattern2.lastIndex:"+pattern2.lastIndex)
}//每次弹出不一样的内容,循环到字符串结束终止

while(matches=pattern1.exec(text)){
alert("index:"+matches.index)

alert("matches[0]:"+matches[0])

alert("pattern1.lastIndex:"+pattern1.lastIndex)
}//每次弹出内容一样,0 cat 0,循环不会终止

2.test()方法,接受一个字符串参数。在模式与该参数匹配的情况下返回true;否则,返回false。在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下,使用这个方法非常方便。

var text='000-00-0000';

var pattern=/\d{3}-\d{2}-\d{4}/;

if(pattern.test(text)){

  alert('The pattern was matched');

}

RegExp实例继承的toLocalString()和toString()方法都会返回正则表达式的字面量,与创建正则表达式的方式无关。

var pattern=new RegExp('\\[bc\\]at','gi');

alert(pattern.toString());//    /\[bc\]at/gi     类型string

alert(pattern.toLocaleString()); //   /\[bc\]at/gi    类型string

alert(pattern.valueOf()); //   /\[bc\]at/gi    类型object

valueOf()方法返回正则表达式本身。

四、RegExp构造函数属性

var text='this has been a short summer,it\'s so short';
var pattern=/(.)hort/g;

while(pattern.test(text)){
  alert(RegExp.input);//返回原始字符串;  
  alert(RegExp.leftContext);//input字符串中lastMatch之前的文本   
  alert(RegExp.rightContext);//input 字符串中lastMatch之后的文本  
  alert(RegExp.lastMatch);//最近一次的匹配项
  alert(RegExp.lastParen);//最近一次匹配的捕获组
  alert(RegExp.multiline);//是否所有表达式都使用多行模式
}

五、正则表达式

1.直接量字符

在正则中一般都会直接匹配字符,如

/javascript/

会直接匹配字符javascript

还支持非字母的字符匹配,如:

\o    NUL字符(\u0000)

\t    制表符(\u0009)

\n    换行符(\u000A)

\v    垂直制表符(\u000B)

\f    换页符(\u000C)

\r    回车符(\u000D)

\xnn   由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n

\uxxxx 由十六进制数xxxx指定的Unicode字符,例如\u0009等价于\t

\cX   控制字符^X,例如,\cJ等价于换行符\n

在正则表达式中,还有一些有特殊含义的标点符号,他们需要'\'来转义

^$.*+?=!:|\/()[]{}

2.字符类

[...]               方括号内的任意字符

[^...]    不在方括号内的任意字符

.        任意字符

\w      任何ASCII字符组成的单词,等价于[a-zA-Z0-9]

\W       任何不适ASCII字符组成的单词,等价于[^a-zA-Z0-9]

\s      任何Unicode空白符

\S      任何非Unicode空白符的字符,注意\w和\S不一样

\d      任何ASCII数值,等价于[0-9]

\D      除了ASCII数字之外的任何字符,等价于[^0-9]

[\b]     退格直接量(特例)

3.重复(次数)

?    0或1次

+    1次或多次

*    任意次

{n}        n次

{m,n}     最少m次,最多n次

{n,}       n次或n次以上

正则默认是贪婪匹配的

如[a+b+]      如果要匹配aaabb,它不会匹配ab和aab等,只会匹配aaabb

[a+?b+?]       这个会匹配aaab   为什么会产生这个区别呢?

答:+?是让正则非贪婪匹配,那么b这里只会匹配一个b,那为什么a会匹配3个呢?这是因为正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。

4.选项|分组|引用

|        用于分隔可供选择的字符,如[ab|cd],他既可以匹配ab也可以匹配cd,注意:选择项的尝试匹配次序是左→右,因此[a|ab],当a匹配通过了之后,就不匹配ab了,就算ab是更好的匹配

()        1.单独的项当成子表达式    /java(script)?/     可以匹配javascript和java   即圆括号部分形成子的表达式,可以对子表达式执行| * ?等操作

         2.完整的模式中定义子模式   后面的可以引用前面圆括号起来的表达式   /(['"])[a-z]\1/     \1引用的是第一个圆括号里的表达式,因此引用了['"]

         3.后部引用前面的子表达式  注意: /['"][a-z]['"]/这个正则的意思是     单引号或双引号加上一个小写字母加上一个单引号或者双引号,前后的单双引号不是匹配的

                                              如果你要匹配可以这么写[(['"])[a-z]\1]

\加数字     可以引用前面圆括号中的表达式    

5.制定匹配位置(锚点)

^    匹配字符串的开头,在多行检索中,匹配一行的开头

$    匹配字符串的结尾,在多行检索中,匹配一行的结尾

\b    匹配一个单词的边界,简言之,就是位于字符\w和\W之间的位置,或位于字符\w和字符串的开头或者结尾之间的位置

\B    匹配非单词边界的位置

(?=p)   零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符

(?!p)  零宽负向先行断言,要求接下来的字符不与p匹配

6.修饰符

写在正则表达式字面量//右侧的

i        执行不区分大小写的匹配

g        执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止

m       多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束    /java$/m   可以匹配  java\nfunc

注意:当正则表达式是全局的时候,每次exec() 和 test()的时候都会把当前设置的lastIndex设为当前的位置,再次执行的时候就会从lastIndex的位置开始执行,因此最好每次执行的时候lastIndex设置为0

RegExp类型的更多相关文章

  1. 引用类型-RegExp类型

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

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

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

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

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

  4. js中RegExp类型

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

  5. 5.4 RegExp类型

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

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

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

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

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

  8. 随笔记录--RegExp类型

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

  9. RegExp类型(正则表达式)

    直接量语法 /pattern/attributes 创建 RegExp 对象的语法: new RegExp(pattern, attributes); 一.attributes: 修饰符 描述 i 执 ...

  10. JS RegExp类型

    用来定义正则表达式的类型, 1. 通常情况下,我们可以直接用字面量形式来定义正则表达式,格式如下: var expression = /pattern/flags pattern为正则表达式 flag ...

随机推荐

  1. 【python之路16】lambda表达式

    1.lambda表达式,实际是建立一个简易的函数 下面代码中f1和f2表示是相同过程的代码 def f1(args): return args f2 = lambda args:args print( ...

  2. sublime3安装javascript控制台环境 方法2

    1.下载node.js sublimeText3- 安装nodejs插件   ctrl+shift+p — install package —nodejs 2.修改配置文件 在 Sublie Text ...

  3. 统计Linux下的CPU状态信息

    def cpu(): all_cpus=[] with open('e:/cpu.txt') as f: core={} for line in f.readlines(): ab=line.spli ...

  4. 生成mysql数据字典

    data_dictionary.php <?php /** * 生成mysql数据字典 */ header("Content-type: text/html; charset=utf- ...

  5. windows10 中微信(UWP)版本不显示通知消息

    前言: 前段时间笔者更换了升级了WINDOWS10系统,从应用商店安装微信后,使用期间不会推送消息通知,右下角的通知栏也无法添加微信图标.搜索百度和Google后,发现很多人都是这样,这是微信(UWP ...

  6. JavaScript--结合CSS变形、缩放能拖拽的登录框

    上例图: 代码块: <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...

  7. mkdir、touch、rm和rmdir命令

    一.mkdir命令 mkdir命令用来创建目录.该命令创建由dirname命名的目录.如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录:如果给出了一个已经存在的路径,将 ...

  8. jquery find 推荐

    https://codeplayer.vip/p/j7soa 这篇写的还是不错的,备用. // 返回jQuery对象所有匹配元素的标识信息数组 // 每个元素形如:tagName或tagName#id ...

  9. jdbc框架-dbutils的简单使用

    jdbc框架-dbutils的简单使用 dbutils:是apache组织的一个工具类,jdbc的框架,更方便我们使用 使用步骤: 1.导入jar包(commons-dbutils-1.4.jar) ...

  10. Symmetric Tree 深度优先搜索

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...