正则表达式
语法 :/正则表达式主体/修饰符(可选)
pattern 模式
- 正则表达式主体
修饰符
- i 忽视大小写
- g 全局匹配 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
- m 换行匹配(多行匹配)
创建正则表达式的方式
使用new
var box = new RegExp("box"); //传入非空字符串
console.log(box); // /box/
console.log(typeof box); //object
var box = new RegExp("box", "gi"); //,第一个参数是模式,第二个参数是修饰符
console.log(box); // /box/gi
字面量
var box = /box/;
console.log(box); // /box/
console.log(typeof box); //object
var box = /box/gi;
console.log(box); // /box/gi
正则符号
基本元字符
.逗号:任意字符
\d:数字
\D:非数字
\s:空白(空格、缩进、换行(换行符\n))
\S: 非空白
\w:字母、数字、下划线
\W:非(字母、数字、下划线)
\ 转义字符
边界符
限制字符串开头和结尾必须是一个什么字符
-
^开头var reg = /^\d/ -
$结尾var reg = /\d$/ -
[^$]开头结尾组合使用var reg = /^abc$/
限定符
【注】只限定,限定符前面的一个字符
-
*0~n次 -
+1~n次 -
?0~1次 -
{n}指定次数 -
{n,}大于等于n次 -
{n,m}n~m次
特殊符号
-
()表示一个整体 -
|或【注】整体 | 整体 -
[]和-([]里面的-取范围用) -
[^]取反
正则表达式的使用
.(逗号)表示一个任意字符
var reg = /g..gle/;
var str = "gadgle";
console.log(reg.test(str));
*表示次数,0次 或是 多次.*任意字符可以出现任意次数
var reg = /g.*gle/;
var str = "gfjsljflksdjflksdjfgle";
console.log(reg.test(str));
[]表示字符可以出现的范围,一个中括号表示一个字符
var reg = /g[a-z]gle/; //范围是a-z
var str = "gagle";
console.log(reg.test(str));
[abc]表示范围只能是a 或b 或c
var reg = /g[abc]gle/;
var str = "gbgle";
console.log(reg.test(str));
[^a-z]在括号内部出现的^取反,不是a-z
var reg = /g[^a-z]+gle/
console.log(reg.test("g12341234gle"));
+表示次数,1次或多次
var reg = /g[a-z]+gle/
console.log(reg.test("gdddddagle"));
?表示次数 0次 或是 1次
var reg = /g[a-z]?gle/
console.log(reg.test("gagle"));
-\w 等于 [a-zA-z0-9_] 匹配字母数字下划线
var reg = /g\w+gle/
console.log(reg.test("ga0_gle"));
\W等于[^a-zA-Z0-9_]匹配非字母数字下划线
var reg = /g\W+gle/
console.log(reg.test("g!*()gle"));
\d[0-9] 匹配数字
var reg = /g\d+gle/
console.log(reg.test("g123415gle"));
\D[^0-9] 匹配非数字
var reg = /g\D+gle/
console.log(reg.test("ga_gle"));
\s匹配空白
var reg = /g\s+gle/
console.log(reg.test("g gle"));
\S匹配非空白
var reg = /g\S+gle/
console.log(reg.test("gafdfgle"));
{n}固定n次
var reg = /g[a-z]{2}gle/;
console.log(reg.test("gafgle"));
{n,m}最少n次,最多m次
var reg = /g[a-z]{2,5}gle/;
console.log(reg.test("gafssgle"));
{n,}最少n次,最多不限
var reg = /g[a-z]{2,}gle/;
console.log(reg.test("gaffajdklfjadjfkadfgle"));
/^匹配开头,从头开始匹配
var reg = /^google/;
console.log(reg.test("google12341234"));
$/匹配结尾,从结束开始匹配
var reg = /google$/;
console.log(reg.test("1345google"));
|使用或模式进行匹配 匹配其中一种字符串
var reg = /ab|db|bc/;
console.log(reg.test("ab"));
()分组模式匹配 整体() 小括号里面的东西可以被当成一个整体
var reg = /(google){4,8}/
console.log(reg.test("googlegooglegooglegooglegooglegooglegooglegoogle"));
- 获取8..8之间的任意字符
var reg = /8(.*)(gg)8/;
var str = "this is 8google8 baab 8ggg8";
console.log(str.match(reg));
console.log(RegExp.$1); //匹配(.*)的内容
console.log(RegExp.$2); //匹配(gg)的内容
- 使用特殊字符匹配
\转义符,可以将本来有语义的字符没有语义,
var str = ".[/b]"
var reg = /\.\[\/b\]/;
console.log(reg.test(str));
捕获性分组 和 非捕获性分组
捕获性分组- 先满足捕获满足的(\d+)([a-z]),再捕获满足(\d+)和([a-z]),贪婪
var reg = /(\d+)([a-z])/;
console.log(reg.exec("123abc"));
非捕获性分组- 给()中加上?: 让捕获不贪婪,只捕获(\d+)([a-z])条件的
var reg = /(?:\d+)(?:[a-z])/;
console.log(reg.exec("123abc"));
正则的方法(2个)
test() 条件满足,返回true,否则返回false
var reg1 = /abc/i; //如果加了修饰符g,第2次匹配会接着上一次的结束的地方开始
console.log(typeof reg); //reg 是一个对象
console.log(reg1.test("helloabcworld"));
exec() 条件满足,匹配出符合正则表达式的值,返回数组,不满足返回null
var reg1 = /abc/i; //如果加了修饰符g,第2次匹配会接着上一次的结束的地方开始
console.log(typeof reg);
console.log(reg1.exec("helloabcworld"));
字符串支持正则的方法(4个)
serach() 条件满足返回下表,不满足返回-1
var str = "abcabcabc";
console.log(str.search("bca"));
match() 条件满足返回数组,条件不满足返回null
console.log(str.match("ca"));
split() 切割 返回数组
console.log(str.split("ca"));
replace() 替换 返回字符串
console.log(str.replace("ca","aaa"));