1、分组
var regex = /(ab)+/g;
var string = "ababa abbb ababab"; console.log( string.match(regex) ); // => ["abab", "ab", "ababab"]
1.1 数据分组提取替换
var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
console.log(string.replace(regex, `$1$2$3`) );
使用replace函数进行匹配 RegExp 是构造函数的全局属性
var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12”;
var result = string.replace(regex, function () {
return RegExp.$2 + "/" + RegExp.$3 + "/" + RegExp.$1;
});
console.log(result);
使用replace函数的时候也可以把参数列出来
var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12”;
var result = string.replace(regex, function (match, year, month, day) {
return month + "/" + day + "/" + year;
});
console.log(result);
1.2 正则中匹配分组
假设有如下需求:匹配如下字符串,且要求前后的分割符号保持一致
var string2 = "2017/06/12”;
var string3 = “2017.06/12";
var regex = /\d{4}(-|\/|\.)\d{2}\1\d{2}/;
这里正则中的\1 就是表示前面分组中获取到的字符串
1.3 引用不存在的分组,会取到反向引用的字符本身
1.4 分组后面有量词,会取最后一个
2、分支结构
var regex = /^I love (JavaScript|Regular Expression)$/;
console.log( regex.test("I love JavaScript") );
console.log( regex.test("I love Regular Expression") );
如果去掉括号
/^I love JavaScript|Regular Expression$/,
匹配字符串是 "I love JavaScript" 和 "Regular Expression",当然这不是我们想要的。
3、非捕获括号 (?:)
如果只想要括号最原始的功能,不涉及引用或反向引用,在括号最开头加上?:
var regex = /(?:ab)+/g;
var string = "ababa abbb ababab”;
console.log( string.match(regex) );
// => ["abab", "ab", "ababab"]