var expression = / pattern / flags;
flag有三种:
g:表示全局(global)模式;
i:表示不区分大小项
m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
正则表达式中的元字符包括:
( [ { \ ^ $ | ) ? * + . ] }
若匹配的字符串中包含以上字符,就必须对它们进行转义。
1. 定义正则表达式:
— 字面量形式
var pattern1 = /[bc]at/i; //匹配第一个“bat”或“cat”,不区分大小写
— 使用RegExp 构造函数
var pattern2 = new RegExp("[bc]at", "i");
2. RegExp 实例属性
RegExp 的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
- global:布尔值,表示是否设置了 g 标志。
- ignoreCase:布尔值,表示是否设置了 i 标志。
- lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
- multiline:布尔值,表示是否设置了m标志。
- source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
3. RegExp 实例方法
- exec() 接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。
返回的数组虽然是 Array 的实例,但包含两个额外的属性:index 和 input。其中 index 表示匹配项在字符串中的位置,input表示应用正则表达式的字符串。
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
注: 对于 exec() 方法而言,即使在模式中设置了全局标志(g),每次也只返回第一个匹配项的信息。在不设置全局标志的情况下,在同一个字符串上多次调用 exec() 将始终返回第一个匹配项的信息。而在设置全局标志的情况下,每次调用 exec() 则都会在字符串中继续查找新匹配项。
- test() 接受一个字符串参数,在模式与该参数匹配的情况下返回true;否则,返回false。
- toLocaleString() 返回正则表达式的字面量
- toString() 同上
var pattern = new RegExp("\\[bc\\]at", "gi");
alert(pattern.toString()); // /\[bc\]at/gi
alert(pattern.toLocaleString()); // /\[bc\]at/gi
4. RegExp 构造函数属性

var text = "this has been a short summer";
var pattern = /(.)hort/g;
if (pattern.test(text)){
console.log(RegExp.input); // this has been a short summer
console.log(RegExp.leftContext); // this has been a
console.log(RegExp.rightContext); // summer
console.log(RegExp.lastMatch); // short
console.log(RegExp.lastParen); // s
console.log(RegExp.multiline); // false, chrome 输出 undefined
}
网友评论