常用字符
1.常用的元字符
代码 | 说明 |
. | 匹配 除换行符以外 的任意字符 |
\w | 匹配 字母 或 数字 或 下划线 或 汉字 |
\s | 匹配 任意的空白符 |
\d | 匹配 数字 |
\b | 匹配 单词的开始或结束 |
^ | 匹配 字符串的开始(在集合字符里[^a]表示非(不匹配)的意思) |
$ | 匹配 字符串的结束 |
[] | 匹配[ ] 里面任意字符 范围查询 |
[-] | 匹配一段连续内容 [3-8] :查询3-8中的字符 |
2.常用反义字符
代码 | 说明 |
\W | 匹配 任意不是字母、数字、下划线、汉字 的字符 |
\S | 匹配 任意不是空白符 的字符 |
\D | 匹配 任意非数字 的字符 |
\B | 匹配 不是单词开头或结束 的位置 |
[^x] | 匹配 除了x以外的任意 字符 |
[^aeiou] | 匹配 除了aeiou 这几个字母以外的任意 字符 |
3.限定字符
代码 | 说明 |
* | 重复 0次 或 更多次 |
+ | 重复 1次 或 更多次 |
? | 重复 0次 或 1次 |
{n} | 重复 N次 |
{n,} | 重复 N次 或 更多次 |
{n,m} | 重复 N次 到 m次 |
4.转义字符
代码 | 说明 |
. | \. 取 . |
* | \* 取 * |
\ | \\ 取 \ |
5.字符分枝
代码 | 说明 |
| | 用 | 将不同条件分割开来 (不用满足不同情况的选择) |
6.字符分组
代码 | 说明 |
() | 通过使用小括号()来分组 |
例如: (\d\w){3} 重复匹配3次(\d\w)
7.懒惰匹配和贪婪匹配
贪婪匹配:通常的行为是匹配尽可能多的字符
懒惰匹配:有时候需要匹配尽可能少的字符、
- 常用的懒惰限定符
代码 说明 *? 重复 任意次,但尽可能少重复 +? 重复 1次或更多次,但尽可能少重复 ?? 重复 0次或1次,但尽可能少重复 {n,m}? 重复 n-m次,但尽可能少重复 {n,} 重复 n次以上,但尽可能少重复
断言:预判某个位置是某个字符。
var str6 = "1hello-world 2hello-js 3hello-html"
代码 | 说明 | 特点 | 举例说明 |
char(?=exp) | 零宽正预测 | 预言某个字符后面出现的字符 | /hello(?=-html)/g 输出-html的hello字符 |
char(?!exp) | 零宽负预测 | 某个字符后面不包含指定正则的字符 | /hello(?!-js)/g --> hello |
(?<=exp)char | 零宽度正预测 | 查询字符左边包含指定字符 | /(?<=hello-)\w/g -->['world', 'js', 'html'] |
(?<!exp)char | 零宽度负预测 | 查询字符左边不否包含指定字符 | /(?<!3hello-)\w+/g 显示显示前面不包含3hello- 的字 --> ['1hello', 'world', '2hello', 'js', '3hello', 'tml'] |
实际案例
1.手机号校验
规则:(第一位1开头,第二位3-9之间的数字,一共11位)
<script>
// /^1[3-9][\d]{9}$/ ---> \d 表示任意一个字符 等同于[0-9]
var regPhone = /^1[3-9][0-9]{9}$/
var strPhone = "1385641232";
console.log(regPhone.test(strPhone));
</script>
2.用户名注册
规则:(第一位以字母开头,第二位开始可以是数字、字母、下划线、-的组合,用户名的长度必须是4-8位)
<script>
var userName = "aa-_3b"
var reg2 = /^[A-z][\w\-]{3,7}$/
console.log(reg2.test(userName)); //以字母开头
</script>
3.邮箱规则:
规则:
1. 开头是数字、字母、下划线(1到多位)
=> 邮箱的名字由:“数字、字母、下划线、-,.” -.不能连续出现也不能作为开始
2. @后面紧跟着:数字、字母(1-多位)
3. 对@后面名字的补充
- 多域名 .com.cn
- 企业邮箱 => xxx@xxx.com
<script>
/*邮箱账户:
1.开头是数字字母下划线(1到多位)
邮箱的名字由“数字、字母、下划线、-,.”几部分组成 ,但是- . 不能连续出现也不能作为开始
2.@ 后面紧跟着:数字、字母 (1-多位)
3. 对@ 后面名字的补充
多域名 .com.cn
企业邮箱 => xxx@ xxx.com
*/
/* ”zjeen-dz.mz@xxx.com.cn“
1)^\w+ 首位出现 1次或多次 字母和数字;
因为 - . 不能连续出现 也不能放在首位 所以需要分开写
2) -?\w* // -?出现0次或1次 \w* 字母和数字出现0次或多次
2) \.?\w+ // .? 出现0次或1次 \w* 字母和数字出现1次或者多次 点后面必须出现字母
3) @[A-z0-9]+ //@后面跟各种字母或数字 可以出现多次
4) [\.A-z0-9]+ // .com.cn
5) [A-z0-9] // 最后一位必须是字母或小数
*/
var str = "zjeen-dz.mz@xxx.com.cn"; // ---> false 因为 - . 中间是或 所以位false
var reEmail2 = /^\w+((-?\w*)|(\.?\w+))@[A-z0-9]+[\.A-z0-9]+[A-z0-9]$/
console.log(reEmail2.test(str));
var str1 = "zjeen-dzmz@xxx.com.cn"; //true
console.log(reEmail2.test(str1));
</script>
4.身份证号码:
规则:
1.一共是18位
2.最后一位可能是X
<script>
/*
2.身份证验证
一共是18位 最后一位可能是x
*/
var ID = "32068119980631454X";
var reID = /\d{18}|\d{17}X/g; // 老师写法:/\d{17[\dX]}/
console.log(reID.test(ID));
</script>
5.获取内容 (运用零度断言)
规则:取出电影的标题,评分,评价人数
//3.获取内容 用断言
var str = '<div class="qy-player-title title-score"><h1 class="player-title play-tit-width"><span id="widget-videotitle">长津湖之水门桥</span></h1> <article class="qy-player-score"><div class="score-top"><span class="score-new">9.6分</span><span class="qy-play-icon arrow979-icon"></span><span class="score-user-num">92.9万人评分</span>'
var titleReg = /(?<=widget-videotitle">).+(?=<\/span><\/h1> )/g
console.log(str.match(titleReg));
var scoreReg = /(?<=score-new">).+(?=分<\/span><span)/g
console.log(str.match(scoreReg));
var articleReg = /(?<=score-user-num">).+(?=万人评分<\/span>)/g
console.log(str.match(articleReg));
6.复杂密码校验
规则:至少包含一个大、小写字母,数字。 数字、字母下划线。4-8位
<script>
// ?=. 0宽正预测,判断后面的字符是否是数字、大小写字母 不占位置
var passwordReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\w{4,8}$/
console.log(passwordReg.test ("Qa132"));
</script>
封装函数:
function passwordReg (str){
var pwdReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\w{4,8}$/ ;
return pwdReg.test(str)
}
console.log (passwordReg("Qa132"));