一、什么是正则表达式
匹配字符串的一组规则
二、如何声明正则表达式
1.字面量 /正则表达式/标志位
2.构造函数 new RegExp(‘正则表达式’,‘标志位’)
三、正则的方法
1.正则表达式.test(字符串)
判断字符串中是否包含了正则表达式,如果有,返回true,如果没有,返回false
2.正则表达式.exec(字符串)
字符串处理正则的方法
1.字符串.match(正则表达式):返回数组
2.字符串.search(正则表达式):查询正则匹配的字符串在父串中第一次出现的下标位置,没有匹配,返回-1;
3.字符串.replace() : 替换
exec 与match的区别
//无g无组的情况:都匹配第一个,结束
//只要能匹配到一次,就返回匹配到的内容
var str = 'how do you do';
var re = /do/;
console.log(re.exec(str)); //['do']
console.log(str.match(re)); //['do']
//有g无组的情况:match将匹配所有的字符
//exec只要能匹配到一次,就返回匹配到的字符
//match会返回所有的匹配到的,匹配到几次就有几个数组元素
var str = 'how do you do';
var re = '/do/g'
console.log(re.exec(str)); //['do']
console.log(str.match(re)); //['do','do]
//无g有组的情况:都返回数组,第一个元素是整个正则匹配的内容(只返回第一次匹配到的),其它元素是由组匹配的内容
var str = 'abc 123,abc 123';
var re = /([a-z]+) (\d+)/;
console.log(re.exec(str)); //['abc 123','abc','123']
console.log(str.match(re)); //['abc 123','abc','123']
//有g有组的情况:exec不受g的影响。match将返回所有匹配的父级(整个正则匹配的内容)
var str = 'abc 123,abc 123';
var re = /[a-z]+ [0-9]+/g;
console.log(re.exec(str)); //['abc 123',[abc],[123]]
console.log(str.match(re)); //['abc 123','abc 123']
exec
- 不受g的影响,如果没有组,则只获取第一次匹配的内容。如果有组,则获取一个父级,多个子级。
match
- 没g没组:只获取一个匹配的内容
- 有g没组:获取所有匹配的内容
- 没g有组:获取一个父级,多个子级
- 有g有组:获取多个父级
四、正则的元字符(三二二三三个一)
1.{} [] ()
(1){} :限制{}前面的一个或一组字符连续出现的次数
- {m} : 限制{}前面的一个或一组字符连续出现m次
- {m,} :限制{}前面的一个或一组字符连续出现m至无暇次
- {m,n} :限制{}前面的一个或一组字符连续出现m至n次
var o_txt = document.querySelector('inout');
//失焦事件 + 正则表达式 === 表单验证
o_txt.onblur = function(){
//获取输入内容
var str = this.value;
//定义正则表达式
var re = /^金{3}$/;
//var re = /^金{3,}$/;
if(re.test(str)){//判断str中是否有re
close();
}
}
(2)[]:表示范围
/^[abc]{3,}$/ : 字符串必须是至少3位的a-c中的字符
/^[a-z]$/i 等价于 /^[a-zA-Z]$/
[0-9]
[\u4e00-\u9fa5] : 中文
(3)():表示组
2. * + ?
限制{}前面的一个或一组字符连续出现的次数
(1)* 限制{}前面的一个或一组字符连续出现 0至 无限次 等价于 {0,}
(2)+ 限制{}前面的一个或一组字符连续出现 1至 无限次 等价于{1,}
(3)?限制{}前面的一个或一组字符连续出现 0 至 1 次 等价于{0,1}
3.^ $
(1)^
1.放到正则表达式的开头,表示断头,限制字符串开头必须为什么
2.放到[]的前面,表示取反
(2)$ 表示断尾,限制字符串必须以什么结尾
4. . | \
(1). : 模糊匹配任意一个字符
(2)| :或者
(3)\ : 转义符
\d : 表示数字 [0-9]
\D : 表示非数字 [^0-9]
\w : 表示数字、字母、下划线 [a-zA-Z0-9_]
\W : 非(字母、数字、下划线)
\s :空白
\S :非空白
\b : 单词 边界
\B : 非边界