一、整体基础梳理
学习了阮一峰的关于RegExp对象的教程,很全面。自己整理如下,加深印象:
1. 新建正则表达式
var regex = /xyz/; var regex = /xyz/i
//等价于:
var regex = new RegExp('xyz'); var regex = new RegExp('xyz','i')
2.1 正则对象属性
1.与修饰符相关属性(global,ignoreCase,multiline):返回布尔值
2.与修饰符无关(lastIndex,source(返回正则表达式字符串形式))
2.2 正则对象方法
test():返回布尔值。当前模式是否匹配表达式
new RegExp(r).test(str)
exec():返回匹配结果。两个属性(index,input)
new RegExp(r).exec(str)
3. 与正则相关的字符串方法
String.prototype.match(reg):返回数组包含全部匹配子字符串
String.prototype.search(reg):按照正则表达进行搜索,返回一个整数,匹配开始的位置
String.prototype.replace(reg, replacement):替换匹配成功的字符串
String.prototype.split(reg):按规则进行字符串分割,返回分割的数组
4. 匹配规则
字面量字符和元字符
(点字符 **.** ,位置字符 **^ & **,选择符 | )
转义符 \
( ^、.、[、$、(、)、|、*、+、?、{和\\) 注意:用构造函数时要双斜杠 \\\
字符类:
例子:
- ^once 表示该模式只匹配那些以once开头的字符串
- bucket$ 这个模式与"bucket"匹配,与"buckets"不匹配。
- ^bucket$ 字符^和$同时使用时,表示精确匹配(字符串与模式一样)
- ^[a-z][0-9]$ 匹配一个字母和数字组成的字符串,如t4,f3等
- [0-9\.\-] 匹配所有的数字,句号和减号
- [^\\\/\^] 除了(\)(/)(^)之外的所有字符
- [ \f\r\t\n] 匹配所有的白字符
^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用^是,它表示”非”或”排除”的意思,常常用来剔除某个字符。
^[^0-9][0-9]$ 与”&5”、”g7”及”-2”是匹配的,但与”12”、”66”是不匹配的。/^(Chapter|Section) [1-9][0-9]{0,1}$/ 替换使用 | 字符来允许在两个或多个替换选项之间进行选择
预定义模式:
- \d 匹配0-9之间的任一数字,相当于[0-9]。
- \D 匹配所有0-9以外的字符,相当于[^0-9]。
- \w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]。
- \W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]。
- \s 匹配空格(包括制表符、空格符、断行符等),相等于[\t\r\n\v\f]。
- \S 匹配非空格的字符,相当于[^\t\r\n\v\f]。
- \b 匹配词的边界。
- \B 匹配非词边界,即在词的内部。
二、常用应用场景
1. 验证用户输入
是否EMail:
/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
密码强度:
^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。
身份证号码:
15位:^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$
18位:^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$
2. 提取URL链接
^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?
3. 提取网页中图片
\\< *[img][^\\\\>]*[src] *= *[\\"\\']{0,1}([^\\"\\'\\ >]*)
4. 提取网页超链接
(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>