正则表达式
介绍
正则表达式是regular expression(规则表达式),就是定义字符串规则的表达式,语法基于一种古老的perl语言,它描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则表达式并不是只有前端才有,很多后端语言也都支持正则,正则本身是独立于语言之外的。当初的浏览器是用来浏览一些新闻之类的文字信息,那么对于字符串的操作就比较重要了,比如验证表单,模糊搜索等。
语法
第一种 new创建正则
1 var reg=new RegExp(‘a‘) 2 var str=‘abcdefg‘; 3 console.log(reg.test(str)); // 返回bool值true,代表是否匹配成功
第二种 字面量创建正则
字面量定义正则的话两条斜线之间的任意字符都是有含义的,都会纳入到正则判断里
var reg = /a/ var str=‘abcdefg‘; console.log(reg.test(str)) // true
特殊字符
[ ] 中括号:匹配其中的某一个字符
[abcde]
匹配abcde其中任意一个
[a-z]
匹配所有小写字母
[0-9]
匹配任意一个数字
( ) 小括号 分组:小括号里面的内容作为整体进行匹配
/(ab) | (cd)/
匹配 ‘ab‘ 或者 ‘cd‘
/(a|b)cd/
匹配 ‘acd‘ 或者 ‘bcd‘
注意:小括号、竖线不要放在 [ ] 内(无意义)
| : 或,跟js中的(||)一样
^:排除(除了) 类似js中的(!)
^ (不在中括号里)匹配字符串开头
$ 匹配结尾
/^ $/ 这样的正则代表完整匹配
转义字符:元字符
所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
元字符 | 含义 | 等价表达式 |
\d | 数字 | [0-9] |
\D | 非数字 | [^0-9] |
\w | 数字,字母,下划线 | [a-z0-9_A-Z] |
\W | 非数字,字母,下划线 | [^a-z0-9_A-Z] |
\s | 空白字符 | |
\S | 非空白字符 | |
. | 全部字符 | |
\b | 匹配单词边界 | |
\B | 匹配 非 单词边界 | |
\0(数字0) | 匹配 NUL 字符 | |
\n | 匹配 换行符 | |
\f | 匹配 换页符 | |
\r | 匹配 回车符 | |
\t | 匹配 制表符 | |
\v | 匹配 垂直制表符 | |
\u4e00 - \u9fa5 | 验证中文 | |
\u5343\u950b\u4e92\u8054 | 千锋互联 |
量词
正则表达式的一个符号块只能匹配文本中的一个符号,如果要多次匹配那么我们就需要量词。
量词 | 含义 | 等价表达式 |
{n} | 匹配n次 | |
{n,m} | 最少n次,最多m次 | |
{n,} | 最少n次,最多不限 | |
+ | 最少1次,最多不限 | {1,} |
? | 可有可无,最多一个 | {0,1} |
* | 可以有也可以没有,个数不限 | {0,} |
修饰符
i 代表让正则不区分大小写
g 代表全局查找
m 代表多行查找(必须与g一起使用,并且,当使用^和$模式时才会起作用)
如:
1 var re = new RegExp(‘a‘, ‘i‘) 2 var re= /a/i
多个修饰符可以写在一起
1 var re = new RegExp(‘a‘, ‘ig‘) 2 var re= /a/ig
直接量字符
正则中有一些字符本身是具有含义的,那么如果我们要匹配这个字符就需要用到 \ 转义
/ 匹配 / | \\ 匹配 \ | \. 匹配 . |
\* 匹配 * | \+ 匹配 + | ? 匹配 ? |
\ | 匹配| | \( 匹配 ( |
\[ 匹配 [ | \] 匹配 ] | \{ 匹配 { |
\} 匹配 } | \’ 匹配 单引号 | \” 匹配 双引号 |
\xxx 查找以八进制数 xxx 规定的字符 | \xdd 查找以十六进制数 dd 规定的字符 | \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符 |
正则对象的API
方法(API) | 描述 |
test | 用来测试某个字符串是否与正则匹配,匹配就返回true,否则返回false |
compile | 该方法的作用是能够对正则表达式进行编译,被编译过的正则在使用的时候效率会更高,适合于对一个正则多次调用的情况 |
exec | 返回的是一个数组,数组元素为匹配的子字符串 |
test方法
1 var reg = /a/ 2 var str = ‘abcdefg‘; 3 console.log(reg.test(str)); // true
compile方法
var reg=/[abc]/gi console.log(reg.test(‘a‘)) reg=/[cde]/gi reg.compile(reg) console.log(reg.test(‘a‘)) console.log(reg.test(‘a‘))
exec方法
var str = ‘dadf123dsafd33dfds;;;[]123dg;123‘ var reg = /\d+/ var arr = reg.exec(str) console.log(arr) // [‘123‘]
支持正则的字符串API
方法(API) | 描述 |
search | 查找第一次匹配的子字符串的位置 ,如果找到就返回一个number类型的index值,否则返回-1 |
replace | 该方法用来将字符串中的某些子串替换为需要的内容,接受两个参数,第一个参数可以为正则或者子字符串,表示匹配需要被替换的内容,第二个参数为被替换的新的子字符串 |
split | 将一个字符串拆分成一个数组,它接受一个正则或者子字符(串)作为参数,返回一个数组 |
match | 接收一个正则作为参数,用来匹配一个字符串,返回一个数组 |