JavaScript 【引用类型】RegExp类型

目录:

  1、创建正则表达式

  2、RegExp 实例属性

  3、RegExp 实例方法

  4、RegExp 构造函数属性 

 

创建正则表达式

1. 以字面量形式创建正则表达式

var expression = / pattern / flags;

pattern 部分是正则表达式。flags部分是标志,用以标明正则表达式的行为,正则表达式的匹配模式支持3个标志(gim)。

 1 <script>
 2     //g
 3     //表示全局模式
 4     //模式将被应用于字符串,而非发现第一个匹配项就停止。
 5     var pattern1 = /at/g;   //匹配字符串中所有"at"的实例
 6     //i
 7     //表示不区分大小写
 8     //在确定匹配模式时忽略模式和字符串的大小写
 9     var pattern2 = /[bc]at/i;   //匹配第一个"bat"或"cat",不区分大小写
10     var pattern3 = /.at/gi;     //匹配字符串中所有以"at"结尾的3个字符的组合,不区分大小写
11     //m
12     //表示多行模式
13     //在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项
14 </script>

在模式 pattern 中如果想要匹配元字符,需要对元字符进行转义。正则表达式中元字符有:( [ { \ ^ $ | ) ? * + . }

1 <script>
2     var pattern1 = /[bc]at/i;     //匹配第一个"bat"或"cat",不区分大小写
3     var pattern2 = /\[bc\]at/i;   //匹配第一个"[bc]at",不区分大小写
4 </script>

2. 使用 RegExp 构造函数创建正则表达式

RegExp 构造函数接收的第一个参数为模式 pattern, 第二个参数为标志 flags。

1 <script>
2     var pattern = new RegExp( "[bc]at", "i" );
3 </script>

在模式 pattern 中如果想要匹配元字符,需要对元字符进行双重转义。例如字面量形式的模式  /w\\hello\\123/  等同于 RegExp 构造函数的模式参数 " \\w\\\\hello\\\\123 "。

3.使用字面量形式创建正则表达式与使用 RegExp 构造函数创建正则表达式的区别

 使用正则表达式字面量必须像直接调用 RegExp 构造函数一样,每次都创建 RegExp 实例。在循环体中,使用字面量形式创建正则表达式实际上只会创建一个实例,不会每次循环都创建一个新实例,比如说第二次循环调用就是从上一次匹配的末尾开始的,不会从头开始匹配。

RegExp 实例属性

RegExp 的每个实例都有以下属性:global、ignoreCase、lastIndex、multiline、source

 1 <script>
 2     var pattern = /\[bc\]at/i;
 3     var pattern2 = new RegExp( "\\[bc\\]at", "i" );
 4     //global
 5     //布尔值
 6     //表示是否设置了 g 标志
 7     console.log( pattern.global );      //输出:false
 8     console.log( pattern2.global );     //输出:false
 9     //ignoreCase
10     //布尔值
11     //表示是否设置了 i 标志
12     console.log( pattern.ignoreCase );   //输出:true
13     console.log( pattern2.ignoreCase );  //输出:true
14     //lastIndex
15     //整数
16     //表示开始搜索下一个匹配项的字符位置,从0算起
17     console.log( pattern.lastIndex );    //输出:0
18     console.log( pattern2.lastIndex );   //输出:0
19     //multiline 
20     //布尔值
21     //表示是否设置了 m 标志
22     console.log( pattern.multiline );    //输出:false
23     console.log( pattern2.multiline );   //输出:false
24     //source
25     //正则表达式的字符串表示
26     //按照字面量形式而非传入够早函数的字符串模式返回
27     console.log( pattern.source );      //输出:\[bc\]at
28     console.log( pattern2.source );     //输出:\[bc\]at
29 </script>

 

RegExp 实例方法

   exec()  

 1 <script>
 2     var text = "mom and dad and baby";
 3     var pattern = /mom( and dad( and baby)?)?/gi;
 4     //lastIndex
 5     //lastIndex 属性用于规定下次匹配的起始位置
 6     console.log( pattern.lastIndex );   //输出:0
 7     //exec()
 8     //接收1个参数:要应用正则表达式的字符串
 9     //有匹配项,则返回一个包含第一个匹配项的数组
10     //无匹配项,则返回 null
11     var matches = pattern.exec(text);
12     //index
13     //index是使用exec()方法后返回的数组的属性
14     //表示匹配项在数组中的位置
15     console.log( matches.index );   //输出:0
16     //input
17     //input是使用exec()方法后返回的数组的属性
18     //表示应用正则表达式的字符串
19     console.log( matches.input );   //输出:mom and dad and baby
20     //数组第一项:与整个模式匹配的字符串
21     console.log( matches[0] );      //输出:mom and dad and baby
22     //数组其它项:与模式中的捕获组匹配的字符串
23     console.log( matches[1] );      //输出: and dad and baby
24     console.log( matches[2] );      //输出: and baby 
25 
26     var text = "cat, bat, sat, fat";
27     //模式不是全局模式,每次调用 exec()返回的都是第一个匹配项,lastIndex始终不变
28     var pattern = /.at/;
29     var matches = pattern.exec( text );
30     console.log( matches.index );       //输出:0
31     console.log( matches[0] );          //输出:cat
32     console.log( pattern.lastIndex );   //输出:0
33     mathces = pattern.exec( text );
34     console.log( matches.index );       //输出:0
35     console.log( mathces[0] );          //输出:cat
36     console.log( pattern.lastIndex );   //输出:0
37     //模式是全局模式,每次调用exec()都会返回字符串的下一个匹配项,lastIndex在每次调用exec()后都会变化
38     var pattern = /.at/g;
39     var matches = pattern.exec( text );
40     console.log( matches.index );       //输出:0
41     console.log( matches[0] );          //输出:cat
42     console.log( pattern.lastIndex );   //输出:3
43     mathces = pattern.exec( text );
44     console.log( matches.index );       //输出:0
45     console.log( mathces[0] );          //输出:bat
46     console.log( pattern.lastIndex );   //输出:8
47 </script>

  test()  

 1 <script charset="utf-8">
 2     var text = "000-00-0000";
 3     var pattern = /\d{3}-\d{2}-\d{4}/;
 4     //test()
 5     //接受1个字符串参数。在模式与该参数匹配的情况下返回 true
 6     //经常用于验证用户输入
 7     if( pattern.test( text ) ){
 8         console.log( "匹配" );          //输出:匹配
 9     }
10 
11     //RegExp实例继承的 toLocaleString() 和 toString() 方法都会返回正则表达式的字面量,与创建正则表达式的方式无关。
12     var pattern = new RegExp( "\\[bc\\]at", "gi" );
13     console.log( pattern.toString() );          //输出:/\[bc\]at/gi
14     console.log( pattern.toLocaleString() );    //输出:/\[bc\]at/gi
15 </script>

 

RegExp 构造函数属性

 1 <script>
 2     var text = "Today is a happy day.";
 3     var pattern = /(.)app/g;
 4     var pattern2 = /(..)a(.)p(.)/g;
 5 
 6     if( pattern.test( text ) ){
 7         //input : 最近一次要匹配的字符串
 8         //$_ 等同于 input
 9         console.log( RegExp.input );        //输出:Today is a happy day.
10         console.log( RegExp["$_"] );        //输出:Today is a happy day.
11         //lastMarch : 最近一次匹配项
12         //$& 等同于 lastMarch
13         console.log( RegExp.lastMatch );    //输出:happ
14         console.log( RegExp["$&"] );        //输出:happ
15         //lastParen :最近一次捕获组
16         //$+ 等同于 lastParen
17         console.log( RegExp.lastParen );    //输出:h
18         console.log( RegExp["$+"] );        //输出:h
19         //leftContext : input字符串中 lastMarch 之前的文本
20         //$` 等同于 leftContext
21         console.log( RegExp.leftContext );  //输出:Today is a 
22         console.log( RegExp["$`"] );        //输出:Today is a 
23         //rightContext : input字符串 lastMarch 之后的文本
24         //$' 等同于 rightContext
25         console.log( RegExp.rightContext ); //输出:y day.
26         console.log( RegExp["$'"] );        //输出:y day.
27         //multiline : 布尔值,表示是否所有表达式都是用多行模式
28         //$* 等同于 multiline
29         console.log( RegExp.multiline );
30         console.log( RegExp["$*"] );        
31     }
32     
33     //RegExp.$1、RegExp.$2......RegExp.$9 分别用于存储第一、第二。。。。。。第九个匹配的捕获组
34     if( pattern2.test(text) ){
35         console.log( RegExp.$1 );   //输出: h
36         console.log( RegExp.$2 );   //输出:p
37         console.log( RegExp.$3 );   //输出:y
38         console.log( RegExp.$4 );   //输出:( 空字符串 )
39     }
40 </script>

 

上一篇:时间戳转化


下一篇:GYCTF 盲注【regexp注入+时间盲注】