知识点
- 量词
| 量词 | 描述 |
|---|---|
| n+ | {1,正无穷} 0-9A-z_ |
| n* | {0,正无穷} 0-9A-z_ |
| n? | {0,1} 出现0或1次 |
| n{x,y} | {1,正无穷} === n+ {0,正无穷} === n* {0,1} === n? |
| ^n | 匹配任何以n开头的字符串 |
| n$ | 匹配任何以n结尾的字符串 |
| ?=n | 匹配任何其后紧接着指定字符n的字符串 (正向预查:?=) |
| ?!n | 匹配任何其后不紧接着指定字符n的字符串 |
- 正则默认贪婪匹配
- 贪婪模式:字符串从左到右一次匹配多,再匹配少,如果一旦匹配上就不回头匹配;
- 贪婪模式的原则:能匹配多个,绝不匹配少个;
- ?的用法
- n?:{0,1} 出现0或1次;
- ?=n(?!n):匹配任何其后(不)紧接着指定字符n的字符串;
- *?:非贪婪模式;
- 子表达式 反向引用
- ()子表达式有记忆功能;
- \1:反向引用第一个子表达式;
- xxxx:出现1次,反向引用3次
- reg.source、reg.multiline
- reg.source:正则的本体
- reg.multiline:属性返回一个布尔值,用于指示当前正则表达式对象实例是否带有multiline标志(m)
- reg.lastIndex()、reg.exec()
- reg.lastIndex()和reg.exec()方法里的index默认吻合;
- reg.lastIndex()可以操作reg.exec()里的index属性
一、正则量词
1. n+:{1,正无穷} 0-9A-z_
var reg = /\w+/g,
str = 'abcdefg';
console.log(str.match(reg)); // ["abcdefg"]
2. n*:{0,正无穷} 0-9A-z_
var reg = /\w*/g,
str = 'abcdefg';
console.log(str.match(reg)); // ["abcdefg", ""]
3. n?:{0,1} 出现0或1次
var reg = /\w?/g,
str = 'abcdefg';
console.log(str.match(reg)); // ["a", "b", "c", "d", "e", "f", "g", ""]
4. n{x,y} {1,正无穷} === n+ {0,正无穷} === n* {0,1} === n?
var reg = /\w{0,}/g,
reg1 = /\w{8,}/g, // 出现8-正无穷次
str = 'abcdefg';
console.log(str.match(reg)); // ["abcdefg", ""]
console.log(str.match(reg1)); // null
5. ^n:匹配任何以n开头的字符串、n$:匹配任何以n结尾的字符串
5.1 检查字符串是否以abcd开头和以abcd结尾
var str = 'abcd123123abcd',
// \s\S:所有字符串,*:出现任意次,^abcd:以abcd开头,abcd$:以abcd结尾
reg = /^abcd[\s\S]*abcd$/g,
// .*:匹配出现0-正无穷次除了回车和换行的所有字符
reg1 = /^abcd.*abcd$/g,
reg2 = /^abcd|abcd$/g; // | :或
console.log(str.match(reg)); //["abcd123123abcd"]
console.log(str.match(reg1)); // ["abcd123123abcd"]
console.log(str.match(reg2)); // ["abcd", "abcd"]
5.2 检查字符串是否以abcd开头和以abcd结尾,并且开头结尾之间是数字
var str = 'abcd123123abcd',
reg = /^abcd\d+abcd$/g;
console.log(str.match(reg)); //["abcd123123abcd"]
5.3 匹配以138开头的11位手机号码
var str = '13854752154',
reg = /^138[\d]{8}/g;
console.log(str.match(reg)); //["13854752154"]
6. ?=n:匹配任何其后紧接着指定字符n的字符串
var str = 'abcdaccd',
reg = /a(?=b)/g, // 匹配a后面跟着b的a
reg1 = /a(?!b)/g; //匹配a后面不跟着b的a
console.log(str.match(reg)); //["a"]--第1个a
console.log(str.match(reg1)); //["a"]--第2个a
二、正则属性、方法、使用技巧
1. xxxx xxyy 子表达式 反向引用
- ()子表达式有记忆功能;
- \1:反向引用第一个子表达式;
- xxxx:出现1次,反向引用3次
var str = 'bbbaaaaccaaaaiddddaaaa',
reg = /(\w)\1\1\1/g; //\1:反向引用第一个子表达式中所记忆的那个字符串3次,
console.log(str.match(reg)); // ["aaaa", "aaaa", "dddd", "aaaa"]
2. reg.source、reg.multiline
- reg.source:正则的本体
- reg.multiline:属性返回一个布尔值,用于指示当前正则表达式对象实例是否带有multiline标志(m)
var str = 'aabbccdddddcceevv',
reg = /(\w)\1(\w)\2/gim;
console.log(str.match(reg)); // ["aabb", "ccdd", "ddcc", "eevv"]
console.log(reg.source); // (\w)\1(\w)\2 -- reg.source:正则的本体
console.log(reg.multiline); // true
3. reg.lastIndex()、reg.exec()
- reg.lastIndex()和reg.exec()方法里的index默认吻合;
- reg.lastIndex()可以操作reg.exec()里的index属性
var str = '123123123123123',
reg = /123/g;
console.log(str.match(reg)); //["123", "123", "123", "123", "123"]
console.log(reg.exec(str));
console.log(reg.lastIndex); //3
reg.lastIndex = 4; //设置下次匹配的属性为4,但是exec()匹配的下标为3的倍数,所以index为6
console.log(reg.exec(str)); // index--> 6