正则表达式
正则表达式(regularexpression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是 否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
1正则表达式基本介绍
JavaScript中的正则表达式用RegExp对象表示,有两种写法:一种是字面量写法;另一种是构造 函数写法
字面量写法
正则表达式字面量写法,又叫Perl写法,因为JavaScript的正则表达式特性借鉴自Perl。正则表达 式字面量定义为包含在一对斜杠/之间的字符,并且可以有3个模式修正符
let expression = /pattern/flags;
这里的patte rn就是指我们的字符串模式,而后面的flags则是指带的模式修正符。 JavaScript中的正则表达式支持下列3个模式修正符:
g:表示全局(global)模式,即模式将被应用于所有字符串,而并非在发现第一个匹配项时立即停 止
i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写
m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹 配的项
RegExp构造函数
和普通的内置对象一样,RegExp正则表达式对象也支持new RegExp。构造函数的形式来创建正 则。RegExp构造函数接收两个参数:要匹配的字符串模式(pattern)和可选的模式修正符(flags)。
let reg1 = /at/i;
//等同于
let reg2 = new RegExp("at","i");
需要注意无论是字面量,还是构造函数,返回的类型都为object
let reg1 = /at/i;
//等同于
let reg2 = new RegExp("at","i");
console.log(typeof reg1);//object
console.log(typeof reg2);//object
字面量构建的正则表达式,那么大致可以分为4个部分:定界符,简单字符, 元字符和模式修正符。而如果是构造函数构建的正则表达式,则少了一个定界符,由简单字符, 元字符以及模式修正符组成。
简单字符在正则表达式中,就是字面的含义,比如/a/匹配a, /b/匹配b,这样的字符被称之为简 单字符,示例如下:
let reg = /dog/;
let str = "This is a big dog"; console.log(reg.test(str));//true
这里我们调用了正则表达式的实例方法test(),该方法如果和传入的字符串能够匹配,则返回 true,否则返回false。
除了简单字符以外,还有一些字符,它们除了字面意思外,还有着特殊的含义,这些字符就是元字符。
元字符 |
名称 |
匹配对象 |
. |
点号 |
单个任意字符(除回车 、换行 、行分隔符u2028和段分隔符U2029外) |
[] |
字符组 |
列出的单个任意字符 |
e |
排除型字符 组 |
未列出的单个任意字符 |
? |
问号 |
匹配0次或1次 |
* |
星号 |
匹配0交或多次 |
+ |
加号 |
匹配1次或多次 |
{a,b} |
区间量词 |
匹配至少a次,最多b次 |
^
|
脱字符 |
行的起始位置 |
$ |
美元符 |
行的结束位置 |
| |
竖线 |
分隔两边的任意一个表达式 |
() |
括号 |
限制多选结构的范围,标注量词作用的元素,为反向引用捕获 文本 |
转义字符
转义字符(escape)表示为反斜线 +字符的形式,共有以下3种情况
1.因为元字符有特殊的含义,所以无法直接匹配。如果要匹配它们本身,则需要在它们前面加上 反斜杠
console.log(/1+1/.test("1+1"));//false console.log(/1+1/.test("1+1"));//true
但实际上,并非14个元字符都需要转义,右方括号]和右花括号}可以不用写转义字符,当然写了 也不会算你错
console.log(/]/.test("]"));//true console.log(/]/.test("]"));//true
2.加非元字符,表示一些不能打印的特殊字符,具体如下表:
符号 含义