正则对象
- var reg = new Regexp('abc','gi')
- var reg = /abc/ig
正则方法
- test方法(测试某个字符串是否匹配)
var str = 'abc123';
var ismatch = /[a-z]+\d+$/.test(str);
console.log(ismatch); //true
- exec方法(捕获字符串)
var str = 'abcd123';
var reg = /([a-z]{1})/g; //如果没有g,每次从开头匹配
var arr = reg.exec(str);
while(arr){
console.log(arr);
arr = reg.exec(str);
}
返回结果:
["a", //总体匹配的字符串
"a", //第一个分组捕获的结果
.., //第..个分组捕获的结果
index: 0 //当前匹配到的字符串所处位置
input: "abcd123" //原始字符串
]
["b", "b", index: 1, input: "abcd123"]
["c", "c", index: 2, input: "abcd123"]
["d", "d", index: 3, input: "abcd123"]
如果没有g,每次从头匹配,调用结果都一样,放到while会死循环。
如果有g,每次正则对象的lastIndex前进到当前匹配末尾。
- compile 方法(编译正则)
var reg = /[a-z]{1}/
var str = 'abcde123';
reg.compile(reg); //接收一个正则参数,进行编译
console.log(reg.test(str));
适用于多次调用正则,提高性能。
String对象的方法
- seach方法(返回第一次匹配结果,修饰符g无效)
var str = 'hello world!';
str.search(/o/); //输出4
- replace方法(正则替换字符串)
var str = 'hello world! hello js';
str.replace(/hello/g,'hi'); //输出: hi world! hi js
加g表示替换所有,不加g只替换第一个
- split方法(字符串拆分为数组)
var str = 'abc-def=ghi|jkl';
var array = str.split(/[^a-z]{1}/);
//输出 ["abc", "def", "ghi", "jkl"]
- match方法(获取字符串)
var str = 'abc123def456hij789';
str.match(/(\d+)/);
// 输出["123", "123", index: 3, input: "abc123def456hij789"] 跟exec方法一致,并带额外属性
var str = 'abc123def456hij789';
str.match(/(\d+)/g);
//输出 ["123", "456", "789"]
全局下返回所有匹配结果,非全局下与正则对象的exec方法一致