1.定义
正则表达式目的在于处理字符串的查找、验证、修改、替换
var reg1 = new RegExp('s','g'); // 构造函数的写法
var reg2 = /s\d?/g; // 字面量写法
2.正则表达式方法
test():判断字符串是否存在符合正则表达式的子字符串,存在返回true,反之返回false
exec():返回一个数组,包括符合正则表达式条件的子字符串的元素和位置
console.log(reg1.test('loves')); // true
console.log(reg2.exec('as1s2bsa')); // ["s1", index: 1, input: "as1s2bsa", groups: undefined]
3.回顾字符串方法
search: 查找子串,返回被查找到的下标
match: 返回被查找到所有符合条件元素的数组,如果不使用/g全局查找跟exec()一样
replace: 替换,返回的是新字符串
split: 切割
var str = 'sabcsabcs';
console.log(str.search(/abc/g)); // 1
console.log(str.match(/abc/g)); // ["abc", "abc"]
console.log(str.replace(/c/g,'f')); // sabfsabfs
console.log(str.split(/b/g)); // ["sa", "csa", "cs"]
4.正则表达式规则
组成正则表达式最基础的字符称为原字符
(1)修饰符:
i:执行对大小写不敏感匹配
g:执行全局匹配
m:执行多行匹配
(2). 通配符,只能代表一个字符,如果需要使用.字符而不是通配符,就需要.进行转义
(3)字符类
**[ad]:**在括号中的字符仅可以选择一个字符,可以理解为或的意思,要么a要么是d,在[]中.仅代表字符,不是通配符
字符类范围:[a-zA-Z0-9]
反义:[^0-9]:除了0-9之外的其他一个字符
转义字符类:
\w:代表[a-zA-Z0-9_]
\W:代表[^a-zA-Z0-9_]
\d:代表[0-9]
\D:代表[^0-9]
\s:代表空白字符
\S:代表非空白字符
var str = 'cat121cotcdtcoot';
console.log(str.match(/c.t/g)); // ["cat", "cot", "cdt"]
console.log(str.match(/c[ao]t/g)); // ["cat", "cot"]
console.log(str.match(/[a-z][0-9]/g)); // ["t1"]
console.log('wq520'.match(/[^0-9]/g)); // ["w", "q"]
5.重复
{a,b}:最少重复a次,最多重复b次
{a,}:匹配a到任意次
*: {0,}
+: {1,}
?: {0,1}
console.log('aaaaaaa'.match(/a{2,4}/g)); // ["aaaa", "aaa"]
console.log('aaaa'.match(/.*/g)); // ["aaaa", ""]
console.log('aaaa'.match(/.+/g)); // ["aaaa"]
console.log('aaaa'.match(/.?/g)); // ["a", "a", "a", "a", ""]
6.非贪婪匹配:任何范围性重复,在重复的次数后增加?就可以实现最小匹配次数
console.log('abcdefg'.match(/\w{1,8}?/)); // ["a", index: 0, input: "abcdefg", groups: undefined]
console.log('abcdefg'.match(/\w{1,8}?/g)); // ["a", "b", "c", "d", "e", "f", "g"]
console.log('abcdefg'.match(/\w{2,6}?/g)); // ["ab", "cd", "ef"]
console.log('abcdefg'.match(/.*?/g)); // ["", "", "", "", "", "", "", ""]
7.或者 |
console.log('abcdef'.match(/abc|def/)); // ["abc", index: 0, input: "abcdef", groups: undefined]
console.log('abcdef'.match(/abc|def/g)); // ["abc", "def"]
8.^以…开头 $以…结尾
console.log('2013-08-081'.match(/^\d{4}-\d{2}-\d{2}$/)); // null
console.log('2013-08-081'.match(/\d{4}-\d{2}-\d{2}/)); // ["2013-08-08", index: 0, input: "2013-08-081", groups: undefined]
9.分组: 使用()完成分组
console.log(/\d{4}(-\d{2}){2}/.test('1908-23-12')); // true
console.log('13955415175'.replace(/(\d{3})(\d{4})(\d{4})/,'$1****$3')) // 139****5175
console.log('<ul><li></li></ul>'.replace(/(<\/?)(\w+)/g,'$1div')) // <div><div></div></div>
-
?= 与 ?!
?= 紧跟其后是
?! 紧跟其后不是console.log('abAc'.match(/\w(?=c)/g)) // ["A"] console.log('abAc'.match(/\w(?!c)/g)) // ["a", "b", "c"] console.log('abAc'.match(/\w+(?=c)/g)) // ["abA"]