正则表达式学习总结(一)
模糊匹配
两种模糊匹配: 横向模糊和纵向模糊
横向模糊
横向模糊是指一个正则可匹配的字符串的长度不是固定的,可以是多种情况的
例子:匹配第一个字符为a,接下来2-5个b,最后为一个c.{}表示一个重复值。
var regex = /ab{2,5}c/g; g为全局模式,匹配所有
var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc";
console.log( string.match(regex) ); /
// => ["abbc", "abbbc", "abbbbc", "abbbbbc"]
1
2
3
4
2
3
4
常用简写方式:
- {m,}:表示至少出现 m 次
- {m}: 等价于 {m,m},表示出现 m 次
- ?: 等价于 {0,1},表示出现或者不出现
- +: 等价于 {1,},表示出现至少一次
- : 等价于 {0,},表示出现任意次,有可能不出现
贪婪匹配:会尽可能多的匹配
惰性匹配:尽可能少的匹配
纵向模糊
纵向模糊是指一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种可能
例子:可以匹配包含a1b,a2b,a3b等字符串,[]用于表示范围,
var regex = /a[123]b/g;
var string = "a0b a1b a2b a3b a4b";
console.log( string.match(regex) );
// => ["a1b", "a2b", "a3b"]
1
2
3
4
2
3
4
常用简写方式:
- \d:表示 [0-9]。表示是一位数字。
- \D:表示 [^0-9]。表示除数字外的任意字符
- \w: 表示 [0-9a-zA-Z_]。表示数字、大小写字母和下划线。
- \W: 表示 [^0-9a-zA-Z_]。非单词字符
- \s:表示 [ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页 符
- \S: 表示 [^ \t\v\n\r\f]。 非空白符
- .: 表示 [^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符 除外
多选分支
(p1|p2|p3),其中 p1、p2 和 p3 是子模式,用 |(管道符)分隔,表示其中任何之一, 例子:既可以匹配good,又可以匹配nice,
var regex = /good|nice/g;
var string = "good idea, nice try.";
console.log( string.match(regex) );
// => ["good", "nice"]
1
2
3
4
2
3
4
需要注意的是分支结构是惰性的,当前面分支匹配上了就不会在匹配后面的。
示例:
- 匹配 16 进制颜色值:#ffbbad, #Fc01DF, #FFF, #ffE
var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
1
- 匹配时间:23:59 02:07
var regex = /^(0?[0-9]|1[0-9]|[2][0-3]):(0?[0-9]|[1-5][0-9])$/;
1
- 匹配日期:2017-06-10
var regex = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
1
- window 操作系统文件路径: F:\study\javascript\regex\regular expression.pdf,F:\study\javascript\rege, F:\study\javascript, F:\
var regex = /^[a-zA-Z]:\\([^\\:*<>|"?\r\n/]+\\)*([^\\:*<>|"?\r\n/]+)?$/;
1
- 匹配 id:
var regex = /id="[^"]*"/
1