关于正则表达式的语法,可以参考 - Python 正则,这篇主要介绍在 JavaScript 中,正则的应用。
RegExp 也是一个 JavaScript 的内置对象,它封装了一些处理正则的方法。
new RegExp() instanceof RegExp // true
test
/*
new RegExp('a') 匹配规则
test('abc') 匹配源 | 返回布尔值
*/
new RegExp('a').test('abc') // true
new RegExp('a').test('bcd') // false
/*
/.../ 是 RegExp 对象的简写,两者是等价的
*/
/a/.test('abc') // true
/a/.test('bcd') // false
exec
/b/.exec('abc') // ["b", index: 1, input: "abc"]
/*
返回匹配的信息
[0] 匹配内容
[1] 首次匹配位置
[2] 匹配源
*/
match
'abc'.match(/a/) // ["a", index: 0, input: "abc"]
/*
match 和 exec 的作用是一样的,只是 match 是字符串方法,而 exec 是正则方法
*/
replace
'a'.replace(/\w/,'b') // b
/*
替换,也是一个支持正则的字符串方法
*/
search
'cba'.search(/a/) // 2
/*
查找字符串位置,不存在返回 -1,可以看出是一个正常正则的 indexOf
*/
split
'a b c'.split(/\s+/) // ['a','b','c'] | 裁剪
分组
/(a)(b)/.exec('ab') // ["ab", "a", "b", index: 0, input: "ab"]
'ab'.match(/(a)(b)/) // ["ab", "a", "b", index: 0, input: "ab"]
/*
() 括号是特别的标示,不会影响正则匹配,括号的内容会单独返回出来,这种操作叫做分组
exec 和 match 都支持分组功能
*/
符号
/*
g 全局 | 匹配多次
*/
'a1a'.match(/a/g) // ['a','a'] | 默认只匹配一次
/*
i 忽略大小写
*/
/a/.test('A') // true
/*
m 多行匹配 | 即使文本换行了也能被匹配到
*/
/^1/.test('\n1') // false
/^1/m.test('\n1') // true