正则表达式在生活包括程序中都有一定的应用
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式的应用场景
- 用于爬虫
- 用于手机号等的验证
- 用于日常文字以及图片的处理
- 用于筛选以及利用数据等
正则表达式的创建
- 用构造函数的形式来构造一个正则规则
var reg = new RegExp(***);
- 用字面量的形式创建正则规则
var reg = /****/;
正则表达式中的字符
-
^ 匹配输入字符串的开始位置。
-
$ 匹配输入字符串的结束位置。
-
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。
-
+匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。
-
\d 匹配一个数字字符。等价于 [0-9]。
-
\D 匹配一个非数字字符。等价于 [^0-9]。
-
\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
-
\W 匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。
-
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
-
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
-
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
-
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
-
[^xyz] 负值字符集合。匹配未包含的任意字符。
-
[a-z] 字符范围。匹配指定范围内的任意小写字母字符。
-
. 匹配除了换行符的任意字符 (英文下的实心句号)
-
| 相当于或
-
量词符号: {n}重复n次 , {n,m} n个到m个 , * 0个或者任意的一个, ? 0个或者一个 , + 至少一个
正则表达式的贪恋与禁止贪婪
- 贪婪模式 : (.*)尽可能多的匹配(最长的结果)
- 非贪婪模式 : (.*?) 讲究就近原则
正则表达式的运算符
正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。相同优先级的从左到右进行运算,不同优先级的运算先高后低。
运算符优先级排序
- \ 转义符
- (), (?:), (?=), [] 圆括号和方括号
- *, +, ?, {n}, {n,}, {n,m} 限定符
- ^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
- | 替换,"或"操作字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。
正则表达式的应用
- Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
- 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
- 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
- 身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(\d{15}$)|(^\d{18}$)|(\d{17}(\d|X|x)$)
- 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
- HTML标记的正则表达式:<(\S?)[^>]>.?|<.? /> ( 首尾空白字符的正则表达式:^\s|\s) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
- IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
- xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
- 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
网友评论