第五章 引用类型>RegExp类型

RegExp类型(正则表达式)

正则匹配模式支持的标志:

var expression = /pattern/ flags;

//flags即匹配模式标志

 

g:    全局模式,被应用与所有字符串,而非发现第一个匹配性时立即停止。

i:     不区分大小写模式。

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

 

var pattern1 = /at/g;
//匹配所有字符串中的at实例;

var pattern2 = /bc[at]/i;

//匹配所有at结尾的字符串,不区分大小写

匹配元字符(即特殊符号 )时,必须转义

正则表达式中其他字符的含义:

{n, m} 匹配前一项至少n次,但是不能超过m次 
{n, } 匹配前一项n次,或者多次 
{n} 匹配前一项恰好n次 
? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1} 
+ 匹配前一项1次或多次,等价于{1,} 
* 匹配前一项0次或多次.等价于{0,} 
___________________________

[...] 位于括号之内的任意字符 
[^...] 不在括号之中的任意字符 
. 除了换行符之外的任意字符,等价于[^\n] 
\w 任何单字字符, 等价于[a-zA-Z0-9] 
\W 任何非单字字符,等价于[^a-zA-Z0-9] 
\s 任何空白符,等价于[\ t \ n \ r \ f \ v] 
\S 任何非空白符,等价于[^\ t \ n \ r \ f \ v] 
\d 任何数字,等价于[0-9] 
\D 除了数字之外的任何字符,等价于[^0-9] 
[\b] 一个退格直接量(特例) 

___________________________

/\d{2, 4}/ //匹配2到4间的数字.

/\w{3} \d?/ //匹配三个单字字符和一个任意的数字.

/\s+java\s+/ //匹配字符串"java" ,并且该串前后可以有一个或多个空格.

/[^"] * / //匹配零个或多个非引号字符.

RegExp的 实例属性

正则的每个实例都具有下列属性:

global:布尔值,是否设置了g标志(全局模式);

ignoreCase: 布尔值,是否设置了i标志。

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

lastIndexOf: 整数,表示开始搜索下一个匹配项的字符位置。

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

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

console.log(pattern1.global);

console.log(pattern1.ignoreCase);
console.log(pattern1.multiline);
console.log(pattern1.lastIndex);
console.log(pattern1.source);

// false
// true
// false
// 0
// \[bc\]at

 

RegExp的 实例方法

exec(): 为捕获组设计的,接受一个参数,即要应用模式的字符串(变量), 返回包含第一个匹配项信息的数组(Array的实例);没有匹配的情况返回null;  返回的数组包含2个额外属性:index (匹配项在字符中的位置)和 input(表示应用正则的字符串);

 

var text = "mom and dad and baby";
var pattern = /mom(and dad( and baby)?)?/gi;

var matches = pattern.exec(text);
console.log(matches.index);
console.log(matches.input);
console.log(matches[0]);
console.log(matches[1]);
console.log(matches[2]);
// 0                                    表示匹配项再字符串中的位置
// mom and dad and baby                 应用的匹配模式的字符串   
// mom                                  第一个匹配的是mom
// undefined                      

 

exec(): 即使再模式中设置了全局标志(g),每次也只返回一个匹配项。如果再同一个字符串多次调用exec()将始终返回第一个匹配项。

非全局模式下,每次调用exec(),返回的都是一个匹配项

var text = "cat , bat, sat, fat";
var pattern1 = /.at/;
var matches = pattern1.exec(text);
console.log(matches.index);
console.log(matches[0]);
console.log(pattern1.lastIndex);

// 0
// cat
// 0


matches = pattern1.exec(text);
console.log(matches.index);
console.log(matches[0]);
console.log(pattern1.lastIndex);

// 0
// cat
// 0

 

 

 

全局模式下,每次调用exec()返回字符串中的下一个匹配项,直到搜索完毕。lastIndex值再每次调用exec都会增加

var pattern2 = /.at/g;
var matches = pattern2.exec(text);
console.log(matches.index);
console.log(matches[0]);
console.log(pattern2.lastIndex);

// 0
// cat
// 3

matches = pattern2.exec(text);
console.log(matches.index);
console.log(matches[0]);
console.log(pattern2.lastIndex);

// 6
// bat
// 9

 

test(): 接受一个字符串参数。再模式与该参数匹配的情况下返回true,不然返回false;用来判断目标字符串与模式是否匹配;

 

var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if(pattern.test(text)) {
    console.log("the pattern was mathesd.")
 }
//  the pattern was mathesd.

 

 

RegExp 构造函数属性

(长属性名)input:              (短)$_       最近一次要匹配的字符串。

 lastMatch                           $&       最近一次的匹配项。

 lastParen                             $+     最近一次匹配的捕获组;

 leftContext                          $`     input字符串中lastMatch之前的文本

 multiline                             $*     布尔值,表示表达式是否使用多行模式

 rightContext                       $'      input字符串中lastMatch之后的文本

 

posted @ 2016-06-06 14:19  岳夏铭心  阅读(208)  评论(0编辑  收藏  举报