目录
定义
1、是描述字符串结构的语法规则
2、是用于匹配字符串中字符组合的模式
3、是一个对象
特点
1、非常灵活
2、逻辑性非常强
3、以非常简单的方式达到对字符串进行复杂的控制
创建正则表达式
方式一:字面量 / /
语法:var 变量 = /表达式/
var reg = /123/ //长度为3
方式二:RegExp构造函数方式
1、var 变量名 = RegExp(/表达式/)
var reg1 = RegExp(/abc/);
2、var 变量名 = new RegExp(/表达式/)
var reg2 = new RegExp(/aac/);
正则表达式的使用
(1)test()方法 用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,返回boolean值 如果复合规则返回 true,否则返回 false。
let s1 = '123';
console.log(reg.test(s1));
console.log(reg1.test(s1));
console.log(reg2.test(s1));
(2)match()方法 是String对象的方法,用来截取符合正则表达式规则的子串 返回值是字符串数组
// 定义字符串
var str = 'good idea abc ff';
// 定义正则表达式
var reg = /\s../gi;
let s1 = str.match(reg);
console.log(s1);
注:转义字符‘\’ 若要输出反斜杠,则需要连续两个'\'
(3)replace()方法 用于在字符串中用一些字符串替换另一些字符串,或替换一个与正则表达式匹配的子串。
(4)exec()方法 用于检索字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
模式修饰符
基本语法:/表达式[switch]/ switch:表示模式修饰字符,可选,主要用于进一步对正则表达式进行设置。
(1)g:表示全局匹配
(2)i:忽略大小写
边界符
(1)^:表示匹配行首的文本
(2)$:表示匹配行尾的文本
以下这个表达式包含了模式修饰符和边界符:
var reg = /^abc$/gi;//以abc开头结尾并且全局匹配忽略大小写
console.log(reg.test('ABC'));//使用ABC测试结果是true 复合正则表达式的规则
预定义符
(1).:匹配除了‘\n’的任何单个字符
(2)\d:匹配所有0-9之间的任意一个数字,相当于[0-9]
(3)\D:匹配所有0-9以外的字符,相当于[^0-9]
(4)\w:匹配任意的字母、数字和下划线,相当于[a-zA-Z0-9]
(5)\W:除所有字母、数字、下划线以外的字符,相当于[^a-zA-Z0-9]
(6)\b:单词分界符
(7)\s:匹配非空格的字符,相当于[^\t\r\n\v\f]
字符范围
(1)[cat]:匹配字符集合中的任意一个字符c、a、t
(2)[^cat]:匹配除c,a,t以外的字符
(3)[A-Z]:匹配字母A-Z范围内的字符
(4)[^a-z]:匹配字母a-z范围外的字符
(5)[\u4e00-\u9fa5]:匹配任意一个中文字符
量词符
(1)?:匹配?前面的字符0次或1次
let reg = /hi?t/;
let str = 'hit';
console.log(reg.test(str));
(2)+:匹配+前面的字符1次或多次
let reg = /bre+ad/;
let str = 'bread';
console.log(reg.test(str));
(3)*:匹配*前面的字符0次或多次
let reg = /bre*ad/;
let str = 'breeeead';
console.log(reg.test(str));
(4){n}:匹配{}前面的字符n次
let reg = /hi{3}t/;
let str = 'hiiit';
console.log(reg.test(str));
(5){n,}:匹配{}前面的字符最少n次
let reg = /hi{3,}t/;
let str = 'hiiiiiiiiiiiiiiiiiiiiiiiiiiit';
console.log(reg.test(str));
(6){n,m}:匹配{}前面的字符n~m次
括号符()
作用:改变限定符的范围
(1)改变限定符范围前:catch|er 匹配结果:catch、er
let reg = /catch|er/;
let s1 = 'cater';
console.log(reg.test(s1));
console.log(reg.exec(s1));
(2)改变限定符范围后:cat(ch|er) 匹配结果:catch、cater
let reg = /cat(ch|er)/;
let s1 = 'cater';
console.log(reg.test(s1));
console.log(reg.exec(s1));
(3)分组:分组前:abc{2} 表示{}前的c要出现2次
let reg = /abc{2}/;
let s1 = 'abcbc';
console.log(reg.test(s1));
console.log(reg.exec(s1));
分组后:a(bc){2}表示{}前的bc要出现2次
let reg = /a(bc){2}/;
let s1 = 'abcbc';
console.log(reg.test(s1));
console.log(reg.exec(s1));
正则表达式的捕获
捕获:使用小括号可以进行分组,当小括号后面有量词时,就表示对整个组进行操作。
let reg = /(\d)(\d)(\d)(\d)/;//表示4位数字,表示每位数字都是0-9之间
let s1 = '1234';
console.log(reg.test(s1));
console.log(reg.exec(s1));
贪婪匹配
表示匹配尽可能多的字符 是正则表达式的默认匹配方式
let str = 'webWEBWebwEb';
let reg1 = /w.*b/gi; //贪婪匹配
console.log(reg1.test(str));
console.log(reg1.exec(str));
懒惰匹配
表示匹配尽可能少的字符 通过?来实现 只要有一次匹配成功则不再继续进行匹配
let reg2 = /w.*?b/gi //懒惰匹配 表示只要有一次匹配成功则不再继续进行匹配
console.log(reg2.exec(str));
正则表达式的优先级
1级 :\
2级: ()、{}
3级:*、+、?、{n}、{n,}、{n,m}
4级:^、$、\任何元字符、任何字符
5级:|