JavaScript正则表达式
正则表达式是一个拆分字符串并查询相关信息的过程。
正则表达式通常被称为一个模式(pattern),是一个用简单方式描述或者匹配一系列符合某个语法规则的字符串。
一、创建正则表达式
ECMAScript通过RegExp类型来支持正则表达式。
1. 字面量创建正则表达式
var expression = /pattern/flags; 2. 构造函数创建
var expression = newRegExp(\, \);
?
g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
? i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
? m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
注意:在开发过程中,如果正则是已知的,则优先选择字面量语法;而构造器方式则是用于运行时,通过动态构建字符串来构建正则表达式。
二、RegExp实例属性
RegExp每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
? global:布尔值,表示是否设置了g标志.
? ? ? ?
ignoreCase:布尔值,表示是否设置了i标志. multiline:布尔值,表示是否设置了m标志.
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起.
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回.
示例1:
var pattern1 = /\\[bc\\]at/i; //等价于
var pattern1 = newRegExp(\, \);
console.log(pattern1.global); //false console.log(pattern1.ignoreCase); //true console.log(pattern1.multiline); //false console.log(pattern1.lastIndex); //0 console.log(pattern1.source); // \\[bc\\]at
三、RegExp实例方法
1. exec()
exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。
返回的数组虽然是Array的实例,但包含两个额外的属性:index和input。 其中index表示匹配项在字符串的位置,而input表示应用正则表达式的字符串。
注意:在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。
示例1:
vartext = \; var pattern1 = /.at/;
var matches = pattern1.exec(text); console.log(matches.index); // 0 console.log(matches[0]); // cat console.log(pattern1.lastIndex); // 0
matches = pattern1.exec(text); console.log(matches.index); // 0 console.log(matches[0]); // cat console.log(pattern1.lastIndex); // 0
示例2:
vartext = \; var pattern2 = /.at/g;
var matches = pattern2.exec(text); console.log(matches.index); // 0 console.log(matches[0]); // cat console.log(pattern2.lastIndex); // 3
matches = pattern2.exec(text); console.log(matches.index); // 5 console.log(matches[0]); // bat console.log(pattern2.lastIndex); // 8 2. test()
test()接受一个字符串参数。在模式与该参数匹配的情况下返回true;否则,返回false。 注意:在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下,使用这个方法非常方便。 示例:
var text=\;
var pattern=/\\d{3}-\\d{2}-\\d{4}/; if(pattern.test(text)){
console.log(\); }
四、正则表达式进阶
1. 精确匹配