RegExp类型
这里只介绍常用的属性和方法
定义
// 字面量
var pattern = / 模式 /标志;
// 或 构造函数
var pattern = new RegExp ("模式", "标志";)
标志:
- g: 全局匹配,不会匹配到第一个就停止;
- i: 匹配时忽略模式和正则表达式的大小写
- m: 多行模式,到达一行文本末尾时仍查找下一行
两种定义方式的区别:
第二种方式,传入的模式是字符串的形式,这个字符串中所有的元字符必须双重转义。
在目前的版本中,使用两种方式定义的正则表达式相同。
字面量定义方式支持创建即使用:
var matches = /(hello \S+)/.exec('This is a hello world!');
console.log(matches[1]);
元字符
正则表达式中有一些元字符,它们具有特殊的含义,因此如果要使用这些
字符则需要转义。
元字符: ( [ { \ ^ $ | ) ? * + .] }
RegExp 属性
- global g标志
- ignoreCase i标志
- multiline m标志
- lastIndex 开始搜索下一个匹配项的字符位置 ( ?)
- source 取得正则表达式字符串(规范形式)
RegExp的实例方法
exec()
返回值:Array || null
这个数组还具有以下属性:
- index: 匹配到的起点索引
- input: 传入exec()的字符串
- groups: 捕获组
如果没有匹配到,则返回 null
设置了g和不设置g的情况下,使用exec()的区别
设置了global属性,连续执行exec()将从lastIndex开始向下匹配,
未设置g的正则表达式,执行exec()将始终从起点开始匹配。
var pattern4 = /apple\w/g;
var apple = "appleaapplebapplec";
var nu = "nop";
var arr;
while((arr = pattern4.exec(apple)) !== null) {
console.log(arr);
console.log(pattern4.lastIndex);
}
/* console.log
[ 'applea', index: 0, input: 'appleaapplebapplec', groups: undefined ]
6
[ 'appleb', index: 6, input: 'appleaapplebapplec', groups: undefined ]
12
[ 'applec', index: 12, input: 'appleaapplebapplec', groups: undefined ]
18
*/
test()
判断传入的字符串与模式是否匹配,返回Boolean,常用于输入判断。
String类型中的模式匹配方法
match(pattern|string)
在字符串上调用match()方法,其返回值与exec()方法相似
search(pattern|string)
返回第一个匹配项的索引,始终从字符串开头向后查找
replace(pattern|string, string)
替换子字符串的方法。
如果传入第一个参数是字符串,则只会替换第一个匹配的子字符串;
传入指定了g标志的正则表达式,将可以替换所有字符串
var pattern4 = /apple\w/g;
var apple = "appleaapplebapplec";
var arr;
var st = apple.replace(pattern4, "banana");
console.log(st); // bananabananabanana
split(string|pattern)
基于分割符,将字符串分隔成多个子串,返回一个数组。
split方法支持传入第二个参数,用于指定数组的大小。