正则表达式
Regular expressions are patterns used to match character combinations in strings.
In JavaScript, regular expressions are also objects. These patterns are used with the
exec()
andtest()
methods ofRegExp
, and with thematch()
,matchAll()
,replace()
,replaceAll()
,search()
, andsplit()
methods ofString
Regular expressions - JavaScript | MDN (mozilla.org)
两种创建形式
基本形式(字面量)
正则表达式内容用一对斜杠包裹
/abc/ // 匹配 abc 子串
使用构造函数创建正则表达式
let re = new RegExp('abc')
脚本加载后正则表达式字面量就会被编译,当正则表达式不变时,使用字面量可获得更好的性能;在脚本运行过程中编译用构造函数创建的正则表达式,如果正则表达式会动态变化,那么就需要使用构造函数来创建正则表达式
正则表达式中的自变量
使用模板字符串的变量拼接将变量代入
let a = 'abc'
`/${
a}/` // 此时匹配的是 abc
正则表达式的模式匹配
简单的模式(字面值)
由基本字符组成,这些字符直接匹配字符内容(相同的字符及顺序)
/abc/ // 匹配 abc 子串,不能有任何差异
特殊字符
利用特殊字符可以构造一些特别的模式匹配,而不仅仅只是匹配固定的基本字符内容,比如匹配不定个数的b
(/b*/
)、以a
开头的字符串/^a/
反斜杠\
在非特殊字符之前的反斜杠表示下一个字符是特殊字符,此时该非特殊字符不再匹配字面上的对应字符,比如/\d/
,匹配 0~9
要注意在字符串字面量中\
是转义字符,所以为了在模式字符串中添加一个反斜杠,需要在字符串中对反斜杠进行转义,也就是new RegExp("\\b")
还有一种特殊情况是当需要匹配反斜杠时,在字符串字面量和正则表达式字面量中都需要对反斜杠进行转义,比如/\b\\/
,"\b\\\\"
字符类(Character classes)
利用字符类可以指定字符的类型(如数字、字母、控制字符)
小数点.
- 默认匹配除行终止符(
\n
,\r
,\u2028
or\u2029
)以外的任何单个字符 - 在一个字符类中,这个点会失去他的特殊含义,并且仅仅只匹配字面上的
.
/.n/
// 将会匹配 "nay, an apple is on the tree" 中的 'an' 和 'on',但是不会匹配 'nay'
在 ES2018 中如果 s
“dotAll” 标志位被设为 true,它也会匹配换行符(ES9的正则扩展)