创建方式
字面量创建方式
var reg = /pattern/flags;
实例创建方式
var reg = new RegExp(pattern, flags);
字面量创建方式和构造函数创建方式的区别:
1.字面量创建方式不能进行字符串拼接,实例创建方式可以
var regParam = 'cm';
var reg1 = new RegExp(regParam+'1'); // /cm1/
var reg2 = /regParam/; // /regParam/
2.字面量创建方式特殊含义的字符不需要转义,实例创建方式需要转义
var reg1 = new RegExp('\d'); // /d/
var reg2 = new RegExp('\\d') // /\d/
var reg3 = /\d/; // /\d/
修饰符
i ignoreCase 忽略大小写
g global 全局匹配
m multiline 多行匹配
元字符
匹配位置
^ 匹配字符串的开始
$ 匹配字符串的结束
\b 匹配单词的开始或结束
\B 匹配非单词边界
\G 上一个匹配的结尾(本次匹配开始)
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$,但不受处理多行选项的影响)
组和范围
\ 在非特殊字符之前的反斜杠表示下一个字符是特殊的
| 逻辑或操作符
[] 定义一个字符集合,匹配字符集合中的一个字符,在字符集合里面像 .,\这些字符都表示其本身
[^] 对上面一个集合取非
- 定义一个区间,例如[A-Z],其首尾字符在 ASCII 字符集里面;若-出现在最后,则匹配字符-
() 分组,将相关的元素归拢,构成单个元素;多选结构,(...|...),规定可能出现的多个子表达式;引用分组,存储子表达式匹配文本,供之后引用。
匹配字符
. 匹配除了换行符之外的任何单个字符
\d 0~9任意一个数字
\D 非0~9之间的任意字符
\w 匹配字母、数字、下划线
\W 匹配非字母、数字、下划线
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
\t Tab
\n 换行符
\r 回车符
\f 换页符
\e Esc
\v 垂直制表符
量词
* 重复零次或更多次 >=0
+ 重复一次或更多次 >=1
? 重复零次或一次 0|1
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
断言
x(?=y) 向前断言, x 被 y 跟随时匹配 x
x(?!y) 向前否定断言, x 没有被 y 跟随时匹配 x
(?<=y)x 向后断言, x 跟随 y 的情况下匹配 x
(?<!y)x 向后否定断言, x 不跟随 y 时匹配 x
就因为这三个知识点,我彻底学废了”正则表达式“
JS正则表达式完整教程(略长)
反向引用
\1匹配的是所获取的第1个()匹配的引用。例如,/(\d)\1/ 匹配两个连续数字字符,如33aa 中的33
\2 匹配的是所获取的第2个()匹配的引用
RegExp 对象属性
lastIndex 一个整数,标示开始下一次匹配的字符位置。
source 正则表达式的源文本。
RegExp 对象方法
test
test接受一个字符串参数,如果正则表达式与指定的字符串匹配返回 true 否则返回 false
let reg = /^Hello/
reg.test('Hello World') // => true
reg.test('Say Hello') // => false
exec
exec同样接受一个字符串为参数,返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
let reg = /([a-z])\d+/
let str = 'a233'
let result = reg.exec(str) // ["a233", "a", index: 0, input: "a233"]
// 0:"a233" 表示我们捕获到的字符串
// 1:"a" 表示我们捕获到的分组字符串
// index:0 表示捕获开始位置的索引
// input 表示原有的字符串
var reg = new RegExp("a(bc)")
var str = "3abc4,5abc6"
reg.exec(str) // ['abc', 'bc', index: 1, input: '3abc4,5abc6', groups: undefined]
exec 方法受参数 g 的影响。若指定了 g,则下次调用 exec 时,会从上个匹配的 lastIndex 开始查找。
var str = "1a1b1c"
var reg = new RegExp("1.", "")
reg.exec(str)[0] // 1a
reg.exec(str)[0] // 1a
var str = "1a1b1c"
var reg = new RegExp("1.", "g")
reg.exec(str)[0] // 1a
reg.exec(str)[0] // 1b