Appearance
正则
基础
- 汉字:
[\u4e00-\u9fa5]
- 数字:
[0-9]
、\d
- 非数字:
[^0-9]
、\D
- 英文、数字、下划线:
[a-zA-Z0-9_]
、\w
- 非英文、数字、下划线:
[^a-zA-Z0-9_]
、\W
- 空白字符:
\s
- 非空白字符:
\S
- 空格换行:
\n\t
- 任意字符:
.
- 特殊字符需要加
\
进行转义
数量词
- 正好出现n次:
{n}
- 最少n,最多m:
{n,m}
- 至少n,最多不限:
{n,}
- 至少出现1次:
+
- 可有可无:
?
- 不限制:
*
标志符:
i
: 不区分大小写g
:全局匹配(所有匹配项都能够被找到。如果没有,将会在找到第一个匹配项后停止)m
: 多行匹配 (改变了插入符号和美元符号的含义。在多行模式下,它们代表一行的开头和结尾,而不是整个字符串)^
: 以什么开头(用在方括号中时表示 非)- $: 以什么结束
子表达式
- 圆括号里的部分我们可以看作是一个子表达式。
js
var reg=/(\d)([a-z]*)/gi
//(\d)就是第一个子表达式
//([a-z]) 是第二个子表达式
var reg=/(\d)([a-z]*)/gi
//(\d)就是第一个子表达式
//([a-z]) 是第二个子表达式
捕获和反捕获
多个子表达式所匹配到的内容按顺序出现在内存的缓冲区中捕获数组,这个我们称为捕获
多个子表达式所匹配到的内容按顺序出现在内存的缓冲区中捕获数组,这个我们称为捕获
js
var str = '1adkk';
var reg=/(\d)([a-z]*)/gi
if(reg.test(str)) {
console.log( RegExp.$1 );
console.log( RegExp.$2 );
console.log( RegExp.$3 );
}
//输出结果:
1
adkk
var str = '1adkk';
var reg=/(\d)([a-z]*)/gi
if(reg.test(str)) {
console.log( RegExp.$1 );
console.log( RegExp.$2 );
console.log( RegExp.$3 );
}
//输出结果:
1
adkk
贪婪匹配
贪婪匹配:当正则表达式中包含能接受重复的限定符时,
通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符,这匹配方式叫做贪婪匹配。
贪婪匹配:当正则表达式中包含能接受重复的限定符时,
通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符,这匹配方式叫做贪婪匹配。
js
var str = '1adkk adkkk adkkkk';
var reg = /([a-z]){4,6}/gi;
var result = str.match(reg);
console.log(result);
输出结果:
0: "adkk"
1: "adkkk"
2: "adkkkk"
var str = '1adkk adkkk adkkkk';
var reg = /([a-z]){4,6}/gi;
var result = str.match(reg);
console.log(result);
输出结果:
0: "adkk"
1: "adkkk"
2: "adkkkk"
懒惰匹配(非贪婪匹配)
当正则表达式中包含能接受重复的限定符时,通常的行为是
(在使整个表达式能得到匹配的前提下)匹配尽可能少的字符,这匹配方式叫做懒惰匹配。
当正则表达式中包含能接受重复的限定符时,通常的行为是
(在使整个表达式能得到匹配的前提下)匹配尽可能少的字符,这匹配方式叫做懒惰匹配。
懒惰量词是在贪婪量词后面加个?
*?
: 重复多次,但是尽可能少重复+?
: 重复1次,但是尽可能少重复??
: 重复0次、1次,但是尽可能少重复{n,m}?
: 重复n~m次,但是尽可能少重复{n,}?
: 重复n次以上,但是尽可能少重复