一、正则表达式概述
1、正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
模式:使用一种特殊符号来实现字符串的匹配。
就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。
许多程序设计语言(javascrippt、php等)都支持正则表达式,这些编程语言中都有相关的方法,使用正则对字符串进行操作。
2、为什么要使用正则表达式
• 数据隐藏(188****520 李先生)
• 数据采集(数据爬虫)
• 数据过滤(论坛敏感词过滤)
• 数据验证(表单验证、手机号码、邮箱地址...)
二、正则对象
1、为什么要使用正则对象呢
在实际应用中,如果想使用正则表达式必须有一个前提:首先要创建正则对象。
2、创建正则对象
① 隐式创建
var 正则对象 = /正则表达式/匹配模式;
② 直接实例化
var 正则对象 = new RegExp(‘正则表达式’, ‘匹配模式’);
3、匹配模式
基本语法:
var reg = /正则表达式/匹配模式;
在正则表达式中,匹配模式常用的有两种形式:
g :global缩写,代表全局匹配,匹配出所有满足条件的结果
i :ignore缩写,代表忽略大小写,匹配时,会自动忽略字符串的大小写
4、与正则表达式相关的几个方法
① RegExp类下的方法(reg.test或reg.exec)
test(str) :判断字符串中是否具有指定模式的子串,返回结果是一个布尔类型的值
exec(str) :返回字符串中指定模式的子串,一次只能获取一个与之匹配的结果
具体操作:正则对象.test( str ) 和 正则对象.exec( str )
regObj.test(str);
regObj.exec(str);
② String类下的方法(str.方法(reg))
search(reg) :与indexOf非常类似,返回指定模式的子串在字符串首次出现的位置
match(reg) :以数组的形式返回指定模式的字符串,可以返回所有匹配的结果
replace(reg,’替换后的字符’) :把指定模式的子串进行替换操作
split(reg) :以指定模式分割字符串,返回结果为数组
具体操作:字符串.match( 正则 )
三、几个重要的概念
1、子表达式
在正则表达式中,通过一对圆括号括起来的内容,我们就称之为“子表达式”。如:
var reg = /\d(\d)\d/gi;
2、捕获
在正则表达式中,子表达式匹配到相应的内容时,系统会自动捕获这个行为,然后将子表达式匹配到的内容放入系统的缓存区中。我们把这个过程就称之为“捕获”。
3、反向引用
在正则表达式中,我们可以使用\n(n>0,正整数,代表系统中的缓冲区编号)来获取缓冲区中的内容,我们把这个过程就称之为“反向引用”。
四、编写正则表达式
1、正则表达式组成
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
var reg = /\d/gi;
2、编写正则表达式三步走
① 查什么
② 查多少
③ 从哪查
3、查什么(匹配符)
匹配符:字符匹配符用于匹配某个或某些字符
在正则表达式中,通过一对中括号括起来的内容,我们就称之为“字符簇”。字符簇代表的是一个范围,但是匹配时,只能匹配某个固定的结果。
[a-z] :匹配字符a到字符z之间的任一字符
[A-Z] :匹配字符A到字符Z之间的任一字符
[0-9] :匹配数字0到9之间的任一数字
[0-9a-z] :匹配数字0到9或字符a到字符z之间的任一字符
[0-9a-zA-Z] :匹配数字0到9或字符a到字符z或字符A到字符Z之间的任一字符
[abcd] :匹配字符a或字符b或字符c或字符d
[1234] :匹配数字1或数字2或数字3或数字4
在字符簇中,通过一个^脱字节来表示取反的含义。
[^a-z] :匹配除字符a到字符z以外的任一字符
[^0-9] :匹配除数字0到9以外的任一字符
[^abcd] :匹配除a、b、c、d以外的任一字符
几个比较特殊的匹配符
\d :匹配一个数字字符,还可以使用[0-9]
\D :匹配一个非数字字符,还可以使用[^0-9]
\w :匹配包括下划线的任何单词字符,还可以使用[0-9a-zA-Z_]
\W :匹配任何非单词字符,还可以使用[^\w]
\s :匹配任何空白字符,space缩写
\S :匹配任何非空白字符,还可以使用[^\s]
.(这是一个点号) :匹配除 "\n" 之外的任何单个字符
[\u4e00-\u9fa5] :匹配中文字符中的任一字符
4、查多少(限定符)
什么是限定符?
限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
* :匹配前面的子表达式零次或多次,0到多,{0,}
+ :匹配前面的子表达式一次或多次,1到多,{1,}
? :匹配前面的子表达式零次或一次,0或1,{0,1}
{n} :匹配确定的 n 次
{n,} :至少匹配n 次
{n,m} :最少匹配 n 次且最多匹配 m 次
特别说明:
① 贪婪匹配
在正则表达式中,默认情况下,能匹配多的就不匹配少的,我们把这种匹配模式就称之为“贪婪匹配。所有的正则表达式,默认情况下采用的都是贪婪匹配原则。
非贪婪匹配
在限定符的后面添加一个问号?,那我们的贪婪匹配原则就会转化为非贪婪匹配原则,优先匹配少的。
5、从哪查(定位符)
定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。
^ :匹配输入字符串的开始位置
$ :匹配输入字符串的结束位置
\b :匹配一个单词边界
\B :匹配非单词边界
6、转义符
在正则表达式中,我们可以使用反斜杠\对某些特殊字符进行转义操作。需要转义的字符:
点号.
小括号()
中括号[]
左斜杠/
右斜杠\
选择匹配符|
7、选择匹配符
在正则表达式中,我们可以通过一个竖线|代表选择匹配符。
9、特殊用法
(?=) :正向预查
(?!) :负向预查
(?:) :输出内容但不捕获