正则表达式

2018-01-09  本文已影响0人  肉肉与马甲线的故事

1.字面量形式的RegExp

var expression= / pattern / flag;

以上就是正则表达式的形式;其中 pattern(模式)部分可以是简单的、复杂的正则表达式,正则表达式可以包含 字符类、限定符(啥?)、分组(又是啥?)、向前查找以及反向引用。每一个正则可以带一个会多个 flag(标志),这个标志用来表明这个正则的行为(行为:是否全局查找,是否忽略大小写,是否多行查找)。目前正则支持3个标志:

因此,正则表达式就是一个模式与上述三个标志的组合体,不同组合产生不一样的结果。

var pattern1=/ at / g ;
// 表示匹配字符串中所有的 “ at ”

var pattern2=/ [bc]at /i;
// 表示匹配第一个出现的“ bat ”或者“ cat ”,不区分大小写

var pattern3=/ .at /gi ;
//  匹配所有以at结尾的3个字符的组合,不区分大小写

注意:正则表达式与其他语言类似。模式中使用的元字符都必须转义。元字符包括:
( [ { \ ^ * | $ ? + . } ] ),这些元字符都有一种及以上的特殊用途

//  表示匹配第一个出现的 [bc]at ”,不区分大小写
var pattern4=/ \[bc\]at / i ;

//  匹配所有的‘.at’
var pattern5=/ \.at /g ;

根据以上的例子可知,在匹配的字符串中有元字符,需要在其前面添加转义字符 \ 来进行转义,否则会将其当做有特殊意义的字符

2.构造函数形式的RegExp

var pattern_1 = new RegExp(“pattern”, "flag");

前面的例子都是使用字面量形式来定义正则表达式,另一种创建正则表达式是使用构造函数 RegExp。他接收两个参数,第一个参数是要匹配的字符串模式,另一个是标志字符串。

var pattern2=/ [bc]at /i;

var pattern_2=new RegExp(“ [bc]at ”, " i ") ;

注意:传递给 RegExp 构造函数的参数都是字符串,所以不能把字面量正则传递给构造函数,并且在某些情况下要对字符进行双重转义。所有的元字符必须双重转义,已经转义过的字符也是。例如 \n(此处的 \ 在字符串中通常会被转义为 \\ ,而在正则表达式字符串中就会变成\\\\);

字面量形式与构造函数形式对比.png

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

4.RegExp的实例方法

4.1 exec() 方法,专为捕获组而设计的。接收一个参数,即要应用模式的字符串,然后返回包含匹配信息的数组,没有匹配的时候返回null;返回的虽然是数array的实例,但是包含两个额外的属性:indexinput。其中index表示匹配项在字符串中的位置,而input表示应用正则表达式的字符串,在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的项

    var test="mom and dad and baby";
    var pattern=/mom (and dad (and baby)?)?/gi;
    var mat=pattern.exec(test);
    console.log(mat);  
打印结果.png

4.2 test() 方法,接收一个字符串参数,当该参数与模式匹配则返回true,否则返回false。

5.RegExp构造函数属性
这些属性适用于作用域中的所有正则表达式,并且基于所执行的最近一次的正则操作而变化,这些属性可以通过两种方式访问


两种访问属性的方式.png

使用这些属性可以从exec()与test()方法执行操作中提取出更具体的信息。


执行方法操作后访问属性.png
上一篇 下一篇

猜你喜欢

热点阅读