正则这个东西,说常用也不常用,用到的时候百度一波也够了。早之前对正则还算熟悉,到了后来几乎忘光了。今天重新学一下简单的正则。
正则主要是用来匹配某一个规则的字符串,可以提取和判断。比如最常用的邮箱、电话号码的正则,比如去除前后空格的正则。
JavaScript有一个正则构造函数RegExp,接收两个参数:
new RegExp(pattern, attributes);
pattern表示匹配的规则,attributes是可选的,包含属性 "g"、"i" 和 "m":
i表示不区分大小写:
var reg = new RegExp('a');
console.log(reg.test('abc'));//true
console.log(reg.test('Abc'));//false
var reg = new RegExp('a', 'i');
console.log(reg.test('abc'));//true
console.log(reg.test('Abc'));//true
g表示全局匹配,会全局匹配,而不是找到第一个就返回:
var reg = new RegExp('a');
console.log('abca'.replace(reg, 'd'));//dbca
var reg = new RegExp('a', 'g');
console.log('abca'.replace(reg, 'd'));//dbcd
m这个几乎不常见,表示多行匹配,作用是修改^$的作用。默认状态下,一个字符串只有一个开头^和一个结尾$,如果采用多行匹配,那么每一个行都有一个^合$:
var reg = new RegExp('^a');
console.log(reg.test('bc\nabc'));//false
var reg = new RegExp('^a', 'm');
console.log(reg.test('bc\nabc'));//true
var reg = new RegExp('a$');
console.log(reg.test('bca\nbc'));//false
var reg = new RegExp('a$', 'm');
console.log(reg.test('bca\nbc'));//true
正则表达式有两种创建语法:
创建对象法:
var reg = new RegExp();
直接量语法:
var reg = //;
两种方法的使用和格式没有什么区别,直接量法会更简便。
比如匹配1开头,第二位是2-9,总共11位:
var reg = /^1[2-9]{1}[0-9]{9}/g
console.log(reg.test(15555555555));//true
方括号[]表示集合,大括号{}表示个数。g全局匹配可选。
[0-9]表示0到9
[a-z]表示小写的字母a到z
[A-Z]表示大写的A到Z
[A-z]表示a到z的所有大小写
[abc]方括号里面的任意一个字符
[^a]除了方括号内的字符其他的任意字符
在方括号内还能使用&|
元字符:
正则里面有很多元字符,比如\d表示所有的数字,\S表示所有的非空格字符,\n表示换行符,\r表示回车符等等。
量词:
大于5个var reg = /[0-9]5+/
等于5个var reg = /[0-9]{5}/
5到9个var reg = /[0-9]{}{5,,9}/
量词还有很多,这只是最简单的几个。
属性:
global:是否有全局标志g
IgnoreCase:是否有标志i
Multiline:是否有标志m
lastIndex:整数,开始匹配字符位置
Source:表达式源文本
方法:
正则对象上只有三个方法,我们一般只用test,返回true或false,表示是否符合表达式的规则。
特殊字符:
比如^和$表示开头和结尾,想要使用就要转义\^和\$。比如我们webpack配置loader,以.vue结尾:/\.vue/,就需要把.转义。特殊字符也有好几个。
正则还有很重要的作用就是支持正则的string对象的方法:
Search、match、replace、split。
比如常用的去除空格:
var reg = /\s/g
console.log('a b c d '.replace(reg, '-'));//a-b-c-d-
其实正则最主要就是知道匹配模式igm,限制个数的量词{},集合的方括号[],开头^和结尾$知道了这几个就能写出很多简单的正则。至于其他的特殊字符、元字符等有想要了解的可以看看文档。
(完)