1.什么是正则表达式
2.如何使用正则表达式
3.获取正则对象
4.字符类别
5.字符集合
6.字符限定
7.括号字符
8.正则运算优先级
什么是正则表达式?
Regular Expression,简称RegExp,是一种描述字符串结构的语法规则,是一种特定的格式化模式,用于验证各个字符串是否匹配这个特征,进而实现高级的文本查找、替换、截取等高级操作。在项目开发中,手机号码的指定隐藏,数据采集,敏感词,的过滤以及表单的验证等查找,都可以利用正则表达式来实现。
使用方法
javascript提供两种方法:RegExp对象提供的exec()方法和String提供的match()方法在指定字符串中进行匹配。
//获取首次匹配结果
var str = 'AbC123abc456';
var reg = /abc/i; //定义正则表达对象
reg.exec(str); //匹配结果:["AbC",index:0,input:"AbC123abc456"]
“/”是正则表达式的界定符,abc是表达式文本,i是模式修饰符,表示忽略大小写,匹配成功是,该方法返回的是一个数组,否则返回null。
var str = "It's is the shorthand it is";
var reg1 = /it/gi;
str.match(reg1); //匹配结果:(2) ["It","it"]
var reg2 = /^it/gi;
str.match(reg2); //匹配结果:[It]
var reg3 = /s$/gi;
str.match(reg3); //匹配结果:["s“]
“^“和”$“表示字符串的起始与结束的位置
获取正则对象
正则的创建有两种方式,字面量和通过RegExp对象的构造函数去创建。
//字面量方法
pattern/flags
//RegExp对象构造函数形式
new RegExp(pattern [,flags])
RegExp(pattern [,flags])
g | 用于在目标字符串中实现全局匹配 |
i | 忽略是大小写 |
m | 实现多行匹配 |
u | 以Unicode编码实现正则表达式 |
y | 粘性匹配,仅匹配目标字符串中此表达式的lastindex属性指引的操作 |
由于Javascript的字符串存在转义的问题,因此代码中的“\\”表示反斜线“\”。
字符类别
字符 含义 字符 含义 . 匹配除“\n”外的任何单个字符 \f 匹配一个换页符(form-feed) \d 匹配任何一个阿拉伯数字 \D 匹配任意一个非阿拉伯数字字符 \s 匹配一个空白符,包括空格,制表符,换页符,换行符等 \S 匹配一个空白符 \w 匹配任意一个字母(大小写),数字,下划线 \W 匹配任意一个非字母(大小写),数字,下划线 \b 匹配单词分节符,如“\bg”可以匹配“bestgrade”,结果为“g” \B 非单词分界符, \t 匹配一个水平制表符(tab) \r 匹配一个回车符 \n 匹配一个换行符 \v 匹配一个垂直制表符 \xhh 匹配ISO-8859-1值为hh(两个十六进制数字)的字符 \uhhhh 匹配Unicode值为hhhh的字符演示代码如下:
var str = "good idea";
var reg = /\s../gi;
str.match(reg); //匹配结果:[" id"]
正则表达式的“[]”可以实现一个字符集合,于连字符“-”一起使用时,表示匹配指定范围内的字符,并于元字符“^”一起使用时,称为反义字符,表示不匹配指定范围内的字符。
以字符串"'get 好 TB6'.match(/pattern/g)"为例
pattern | 说明 | 匹配结果 |
---|---|---|
[cat] | 匹配字符集合中的任意一个字符 | ["t"] |
[^cat] | 匹配除c,a,t之外的其他字符 | (6) ["g","e","好","T","B","6"] |
[B-Z] | 匹配字母B-Z范围内的字符 | (2) ["T","B"] |
[^a-z] | 匹配字母a-z范围外的字符 | (4) ["好","T","B","6"] |
[a-zA-Z0-9] | 匹配大小写字母和0到9范围内的字母 | (6) ["g","e","t","T","B","6"] |
[\u4e00-\u9fa5] | 匹配任意一个中文中文字符 | ["好"] |
项目开发中,若需要匹配一个连续出现的字符串,通过前面的学习,可创建如下正则对象
var reg = /\d\d\d\d\d\d/gi;
随然实现了需求,但这样的代码不利于阅读,书写有繁琐,所以我们可以使用限定符(?、+、*、{})来完成某个连续出现的字符匹配。
字符 | 说明 | 示例 | 说明 |
---|---|---|---|
+ | 匹配前面的字符一次或多次 | bre+ad | bread 到 bre...ad |
* | 匹配前面的字符零次或多次 | ro*se | rse 到ro...se |
{n} | 匹配前面的字符n次 | hit{2}er | hitter |
? | 匹配前面的字符零次或一次 | hi?t | ht and hit |
{n,} | 匹配前面的字符最少n次 | hit{2,}er | hitter 到 hitt...er |
{n,m} | 匹配前面的字符最少n次,最多m次 | fe{0,2}l | fl,fel,feel |
当点字符(.)和限定符连用时,可以实现匹配指定数量范围内的任意字符,支持贪婪匹配和惰性匹配两种方式,默认情况下时贪婪匹配,在限定符后面加上“?”时,实现惰性匹配。
var str = 'webWEBWebwEb';
var reg1 = /w.*b/gi; //贪婪匹配
var reg2 = /w.*?b/gi; //惰性匹配
str.match(reg1); //结果:["webWEBWebwEb"]
str.match(reg2); //结果:["web"]
括号字符
在正则表达式中,被括号字符“()”括起来的内容,称之为“子表达式”
两个作用:改变限定符的范围和分组
1,改变范围前
正则表达式:catch|er 可匹配结果:catch、er
改变范围后:
正则表达式:cat(ch|er) 可匹配结果:catch、cater
2,分组
分组前
正则表达式:abc{2} 可匹配结果:abcc
分组后
正则表达式:a(bc){2} 可匹配结果:abcbc
反向引用可以参考我转载的一篇文章,在次就不多赘述了。
运算符 | 说明 |
---|---|
\ | 转义符 |
(),(?:),(?=),[] | 括号和中括号 |
*,+,?,{n},{n,},{n,m} | 限定符 |
^,$,\任何元字符,任何字符 | 定位点和序列 |
| | 或操作 |