中括号(方括号)[] 只能 匹配1个字符,里面的内容表示 字符簇, 使用 - 表示范围。
[a-z] // 匹配所有的小写字母
[A-Z] // 匹配所有的大写字母
[a-zA-Z] // 匹配所有的字母
[A-z] // 匹配所有的字母,同[a-zA-Z]
[0-9] // 匹配所有的数字
[0-9\.\-] // 匹配所有的数字、句号、减号
[ \n\f\r\t\v] // 匹配所有的空白字符(空格、换行符、换页符、回车符、水平制表符、垂直制表符)
花括号 {} 跟在 字符 或 字符簇 后面,用来确定前面的内容重复出现的次数,称为 限定符。
除了{},还有 其他限定符:
*:重复0次或多次,等价于:{0,}
+:重复1次或多次,等价于:{1,}
?:重复0次或1次,等价于:{0,1}
|:指明两项之间的一个选择,要匹配|,请使用|
(): 小括号分组符,用来匹配和提取数据。匹配内容示例:
1.1 分组(ab)
小括号里的内容为 正则分组
var regex = /(ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) ); // ["abab", "ab", "ababab"]
1.2 分支(ab|cd)
var regex = /^I love (JavaScript|Regular Expression)$/;
console.log( regex.test("I love JavaScript") ); // true
console.log( regex.test("I love Regular Expression") ); // true
2.1 提取数据
var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
console.log( string.match(regex) );
// => ["2017-06-12", "2017", "06", "12", index: 0, input: "2017-06-12"]
上面的正则表达式,有3个 正则分组。
match返回的一个数组: 第一个元素是整体匹配结果,然后是各个 正则分组(括号里)匹配的内容,然后是匹配下标,最后是输入的文本。(注意:如果正则是否有修饰符g,match返回的数组格式是不一样的)。
var regex = /\d{4}(-|\/|\.)\d{2}\1\d{2}/;
var string1 = "2017-06-12";
var string2 = "2017/06/12";
var string3 = "2017.06.12";
var string4 = "2016-06/12";
console.log( regex.test(string1) ); // true
console.log( regex.test(string2) ); // true
console.log( regex.test(string3) ); // true
console.log( regex.test(string4) ); // false
\1: 引用第1个 正则分组 匹配到的内容
\10: 引用第10个 正则分组 匹配到的内容
只想用括号的分组功能,但不引用,不提取数据。
var regex = /(?:ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) ); // ["abab", "ab", "ababab"]
内联匹配模式,通常用内联匹配模式代替使用枚举值RegexOptions指定的全局匹配模式,写起来更简洁