正则表达式概述
正确的规则
- 什么是正则表达式?
检测字符串的一组规则。
- 正则表达式的作用?
主要用于表单验证 处理复杂的字符串。
如何声明正则表达式?
- 字面量方式:
/正则表达式/标志位
- 构造函数方式:
new RegExp('正则表达式','标志位')
正则表达式的方法?
- 正则表达式.test(字符串) : 检测字符串中是否包含了正则的内容,如果包含了,则返回true,否则,返回false.
- 正则表达式.exec(字符串) : 将字符串中匹配到正则的内容以数组的方式返回。如果没有匹配的内容,返回null
处理正则表达式的字符串方法?
- 字符串.match(正则) : 将字符串中匹配到正则的内容以数组的方式返回。如果没有匹配的内容,返回null
- 字符串.search(正则) : 与indexOf的功能相同,查找正则匹配的内容在父串中第一次出现的下标位置 ,如果没有找到,返回 -1
var re = /de/; var str = 'how do you do'; console.log(str.search(re)); //-1
exec与match的区别:
//1. 无g无组的情况 var re = /do/; var str = 'how do you do'; console.log(re.exec(str)); //['do'] console.log(str.match(re)); //['do'] //2. 有g无组的情况 var re = /do/g; var str = 'how do you do'; console.log(re.exec(str)); //['do'] console.log(str.match(re)); //['do','do'] //3. 无g有组的情况 var re = /([a-z]+) (\d+)/; var str = 'haha 2022'; console.log(re.exec(str)); //['haha 2022','haha','2022'] console.log(str.match(re)); //['haha 2022','haha','2022'] //3. 有g有组的情况 var re = /([a-z]+) (\d+)/g; var str = 'haha 2022,hehe 2023'; console.log(re.exec(str)); //['haha 2022','haha','2022'] console.log(str.match(re)); //['haha 2022', 'hehe 2023']
正则表达式的元字符 (三、三、二、三个一)
三: {} [] ()
- {} : 表示{}前面的一个或一组字符连续出现的次数。
- {m} : 表示{}前面的一个或一组字符连续出现 m 次
- var str = 'ooo';
var re = /^o{3}开头必须是/;//开头必须是o/; // ^开头必须是o 结尾必须是o
console.log(re.test(str)); //true
{m,} : 表示{}前面的一个或一组字符连续出现 m 至 无限次,至少出现m次
var str = 'ooooooooooooooooooooo';
var re = /^o{3,}$/;
console.log(re.test(str)); //true
- * : 表示*号前面的一个或一组字符连续出现 0 至 无限次 {0,}
var str = 'oooo';
var re = /^o{3,5}$/;
console.log(re.test(str)); //true
- + : 表示+号前面的一个或一组字符连续出现 1 至 无限次 {1,}
var re = /^do+$/
var str = 'doooooooooooo';
console.log(re.test(str));
- ? : 表示?号前面的一个或一组字符连续出现 0 至 1 次 {0,1}
var re = /^do?$/
var str = 'd';
console.log(re.test(str));
^ $
- ^
写在正则表达式的开头,表示断头,限制字符串的开头必须是指定的字符。 写在[]的开头,表示取反
var re = /^[^0-9]+/ var str = 'd45678'; console.log(re.test(str)); var re = /^[^0-9]+$/ var str = 'd!@#$%'; console.log(re.test(str));
- $
表示断尾,限制字符串的结尾必须是指定的字符。
var re = /!$/ var str = 'How do you do!'; console.log(re.test(str));
三个一 : . | \
- . : 表示模糊匹配任意一个字符。
var re = /^h.*w$/; var str = 'h2345r6t7y8uiokjfder56789iokw'; console.log(re.test(str));
| : 表示或,一般结合组一起使用。
var re = /^h.*w$/; var str = 'h2345r6t7y8uiokjfder56789iokw'; console.log(re.test(str));
\ : 表示转义符,将具有特殊含义的符号转为普通字符。
//文件类型(后缀)(扩展名) .html .js .css .mp4 .c var re = /\.[a-zA-Z0-9]{1,4}$/; var str = 'index.html'; console.log(re.test(str));
\d : 表示数字 [0-9]
//邮政编码 var re = /^\d{6}$/; var str = '034017'; console.log(re.test(str)); //手机号 var re = /^1(1|2|3|4|5|6|7|8|9)\d{9}$/; var str = '17710875717'; console.log(re.test(str)); // 2022/7/20 var re = /^(\d{4}|\d{2})\/\d{1,2}\/\d{1,2}$/; var str = '22/7/20'; console.log(re.test(str));
\D : 表示非数字 [^0-9]
\w : 表示字母、数字、下划线 [a-zA-Z_]
//京东密码规则 var re = /^\w{8,16}$/; var str = 'abc_12345678'; console.log(re.test(str));
\W : 表示 非(字母、数字、下划线) \s : 表示空白 \S : 表示非空白 \b : 表示单词边界 \B : 表示非边界
正则表达式的标志位
- g : 全局匹配,匹配出所有的匹配项,并非在发现第一个匹配项时就立即停止
- i : 不区分大小写字母
- m: 表示多行模式(multiline),可以进行多行匹配,但是只有使用^和$模式时才起作用,在其他模式中,加不加入m都可以进行多行匹配
案例分析
var pattern = /(google){4,8}/; var str = 'googlegoogle'; alert(pattern.test(str)); ```flase ```js var pattern = /(google|baidu|bing)/; var str = 'google'; alert(pattern.test(str)); var pattern = /goo\sgle/; var str = 'goo gle'; alert(pattern.test(str)); var pattern = /google\b/; var str = 'google'; var str2= 'googleaa googlexx google dsdddd'; alert(pattern.test(str)); alert(pattern.test(str2)); var pattern = /g\w*gle/; var str = 'google'; alert(pattern.test(str)); var pattern = /google\d*/; var str = 'google444'; alert(pattern.test(str)); var pattern = /\D{7,}/; var str = 'google8'; alert(pattern.test(str)); var pattern = /g[a-zA-Z_]*gle/; var str = 'google'; alert(pattern.test(str)); var pattern = /g[^0-9]*gle/; var str = 'google'; alert(pattern.test(str)); var pattern = /[a-z][A-Z]+/; var str = 'gOOGLE'; alert(pattern.test(str)); var pattern = /g.*gle/; var str = 'google'; alert(pattern.test(str)); var pattern = /^[a-z]+\s[0-9]{4}$/i; var str = 'google 2012'; alert(pattern.exec(str)); var pattern = /^[a-z]+/i; var str = 'google 2012'; alert(pattern.exec(str)); var pattern = /^([a-z]+)\s([0-9]{4})$/i; var str = 'google 2012'; alert(pattern.exec(str)[0]); alert(pattern.exec(str)[1]); alert(pattern.exec(str)[2]); var pattern = /Good/ig; var str = “good good study!,day day up!”; alert(str.replace(pattern,’hard’)); var pattern = /(.*)\s(.*)/; var str = 'google baidu'; var result = str.replace(pattern, '$2 $1'); document.write(result) var pattern = /8(.*)8/; var str = 'This is 8google8'; var result = str.replace(pattern,'<strong>$1</strong>'); document.write(result); Var pattern = /good/ig; var str = ‘good good study!,day day up!’; alert(str.match(pattern)); alert(str.match(pattern).length); var pattern = /8(.*)8/; var str = 'This is 8google8, dd 8ggg8'; alert(str.match(pattern)); alert(RegExp.$1); var pattern = /good/ig; var str = ‘good good study!,day day up!’; alert(str.search(pattern));