1简介:

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个字符串中是否含有某种子串、将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等。
比如:在字符串“hello world”中,查找是否含有l,并且l后面不能是d。
正则表达式本身是一门独立的技术,可以被大多数编程语言所使用,如Javascript、PHP、Java

2应用场景

2.1 表单验证里面,验证字符的合法性,如邮箱是否合法,手机号是否合法等等。
2.2 信息过滤,如论坛帖子或者评论中的非法字符,例如 sql注入、js脚本注入、煽动性的言论。
2.3 信息采集,采集别人网站上面的内容,例如整页采集时 筛选出需求的部分
2.4 信息替换。
2.5 页面伪静态的规则

<script>
    //从字符串php中,检查是否还有p字母
    var  str = 'php';
    var  result  = str.match(/h/);
    console.log(result);
    //如果str中含有m,name返回一个包括m的数组
    //如果str中没有m,返回null;
</script>

什么叫做匹配?
匹配的意思是在字符串中查找某个字符,如果查到了就表示匹配,如果没有查到表示不匹配。
正则表达式语法:

     /正则规则/  

正则表达式用两条斜线表示起始和结尾的标识符。

全局修饰符g
正则表达式用两条斜线表示起始和结尾的标识符。

没有修饰符g的时候,在匹配一次之后,将停止向后继续检索。
加入修饰符g之后,会一直检索到字符串的末尾,会将所有的匹配结果都查找出来。

正则语法

1、量词

n+ 匹配任何包含至少一个 n 的字符串。匹配一个或多个前导字符(前导字符就是紧挨着+的前一个字符)
n* 匹配任何包含零个或多个 n 的字符串。前导字符有没有都行
n? 匹配任何包含零个或一个 n 的字符串。
n{X} 匹配包含 X 个 n 的序列的字符串。
n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
n{X,} 匹配包含至少 X 个 n 的序列的字符串。
n

禁止引用

正则表达式的整理_javascript 那些事儿

匹配中文

每个字符(中文、英文字母、数字、各种符号、拉丁文、韩文、日文等)都对应着一个Unicode编码。
查看Unicode编码,找到中文的部分,然后获取中文的Unicode编码的区间,就可以用正则匹配了。
中文的Unicode编码从4E00开始,到9FA5结束。
完整的Unicode编码表

环视(断言/零宽断言)

(?=n) 匹配任何其后紧接指定字符串 n 的字符串。
正则表达式的整理_javascript 那些事儿_02
!n 匹配任何其后没有紧接指定字符串 n 的字符串。
正则表达式的整理_javascript_03
另外,还会看到(?!B)[A-Z]这种写法,其实它是[A-Z]范围里,排除B的意思,前置的(?!B)只是对后面数据的一个限定,从而达到过滤匹配的效果。

正则对象的属性和方法

regexp.exec && regexp.test
1 .exec方法和lastIndex属性
exec方法执行一个正则匹配,只匹配一次,匹配到的结果就返回一个数组类型的结果。匹配不到就返回null。并将表示匹配的位置 置为下一个匹配的位置。
lastIndex一个整数,标示开始下一次匹配的字符位置。没有更多匹配重置lastIndex为0.
正则表达式的整理_正则表达式的整理_04
匹配带子表达式的例子:
正则表达式的整理_正则表达式的整理_05
例二:
正则表达式的整理_javascript_06
2. test方法
test方法检测目标字符串和正则表达式是否匹配,如果匹配返回true,不匹配返回false。
正则表达式的整理_javascript_07

支持正则表达式的 String 对象的方法

1、search()
在字符串中搜索符合正则表达式的结果。如果找到结果返回结果的位置,停止向后检索,也就是说忽略全局标识符g;如果没有匹配结果,返回-1。
正则表达式的整理_正则表达式的整理_08
2、match() 在字符串中检索匹配正则表达式的子串;如果匹配,返回包含匹配结果的一个数组;不匹配返回null。
不加全局g的情况:
获取的结果只是第一个匹配的内容,匹配的内容中的第一个单元是匹配的结果,后面的单元是子表达式正则表达式的整理_javascript_09
3、split()
将字符串分割成数组
正则表达式的整理_javascript 那些事儿_10
4 、replace ()
默认只替换一次,加g全部替换。
正则表达式的整理_javascript 那些事儿_11

替换abc为a[a-b-c]c
正则表达式的整理_正则表达式的整理_12
正则表达式的整理_正则表达式的整理_13
替换aaa bbb ccc为Aaa Bbb Ccc
正则表达式的整理_javascript_14
案例
1 匹配手机号格式是否正确
特定:
11位
纯数字
1开头
更加细致的特定:2/3位特定。
正则表达式的整理_javascript 那些事儿_15
2、匹配邮箱格式是否正确
如果是特定的邮箱,@后面的部分固定。
比如使用新浪邮箱: sina.com sina.cn
比如qq邮箱: qq.com
这种验证邮箱格式的代码就比较简单了。
新浪邮箱要求:
4~16位
不能有大写字母
必须是字母开头
只能使用数字、字母、下划线
正则表达式的整理_javascript_16
验证完整的邮箱格式:
@前面必须有用户名(理论上说要大于2位,小于255位,可以使用数字、字母、下划线、中横线、点)
必须有@
@后面有一个域名(理论上2~255位,可以是数字和字母)
必须有点
必须有后缀(可以是com/cn/org/gov/cc/net/edu)
后面两个部分可以有1到2个,如aaaa@sina.com.cn
正则表达式的整理_javascript 那些事儿_17
3用户名验证
注册的时候,要求用户名:长度4~10位,不能是纯数字,不能是纯字母,不能有特殊符号,不能以数字打头。
正则表达式的整理_javascript_18