一、正则表达式:
含义:定义字符串中【字符出现的规则】的表达式
何时使用:切割 替换 *验证*
如何使用:
1、最简单的正则:关键字原文,但是写法和以前的字符串不同,"no"-->/不同/ig
(i:忽略大小,g:全部,替换的话默认只会替换第一个匹配到的关键字)
2、备选字符集:
规定一位字符可能出现的情况
何时使用:只要关键字有多种情况的时候
如何使用:/[备选字符集]/
强调:1、一个括号中,只能管一个字
2、问题:正则默认只要满足后,就不管后续操作,后续用户就可以乱来!
解决:【只要是做验证】,我们肯定希望用户完全按照我们的规则来玩,必须写为:
/^[备选字符集]$/-前加^后加$的意思是要求用户从头到尾完全匹配
特殊:1、如果选字符集种有部分uniconde号是连续的,则可用-省略掉中间部分
比如:
一位数字:[0-9]
一位字母:[A-Za-z]
一位数字、字母、下划线:[0-9A-Za-z]
一位汉子:[\u4e00-\u9fa5];
2、除了xxx之外,其他都可以
[^xxx]-范围太广,不推荐
3、预定义字符集:
前辈们提前定义了的一些常用的字符集
1. 一个数字:\d ===[0-9]
2. 一位数字、字母、下划线:\w ===[0-9A-Za-z]
3. 一位空白字符:\s === 空格、制表符、换行
4. 一位除了换行外的任意字符:. -范围太广,不推荐
- 问题:预定义字符集是固定的,不灵活
- 建议:开发时优先使用预定义字符集,预定义字符集满足不了,再用备选字符集补充
强调:不管是备选字符集还是预定义字符集,一个只管一位
4、量词:规定了字符集出现的次数
如何使用
1、有明确的数量
- 字符集{n,m}:前边相邻的字符集最少出现n次,最多出现m次
- 字符集{n,}:前边相邻的字符集最少出现n次,多了不限
- 字符集{n}:前边相邻的字符集必须出现n次
2、没有明确数量:
- 字符集?:前边相邻的字符集,可有可无,最多一次
- 字符集*:前边相邻的字符集,可有可无,多了不限
- 字符集+:前边相邻的字符集,至少一次,多了不限
3、指定匹配位置
- ^:以xxxxx开头
- $:以xxxx结尾
- 特殊:如果同时使用了,前加^后加$,从头到尾完全匹配 只要是做验证,必须这么写 4、选择和分组:
选择:
- 可以再多个条件中选择一个
- 规则1|规则2
分组:
- 选择和分组一般来说都是需要搭配使用的 - 添加了子规则
- (规则1|规则2)
5、预判:
目的:密码强度:4-6位密码,可以输入字母数字,但是必须要有一位大写和一位数字的组合
公式:比如:
1、/^(?![0-9]+$)$/ - 不能全由数字组成,可能有大写字母、
小写字母、汉字、特殊符号、日文、韩文...
2、/^(?![A-Za-z]+$)$/ - 不能全由大写组成,也不能全由小写组成,也不能由大写和小写的组合组成,可能有数字、汉字、特殊符号、日文、韩文...
- //4-6位密码,可以输入字母数字,但是必须要有一位大写和一位数字的组合
var reg=/^(?![0-9a-z]+$)(?![A-Za-z]+$)[0-9A-Za-z]{4,6}$/
- //4-6位密码,可以输入字母数字,但是必须要是3者的组合
var reg=/^(?![0-9a-z]+$)(?![A-Za-z]+$)(?![0-9A-Z]+$)[a-zA-Z0-9]{4,6}$/;
二、字符串的APl:
1、切割:
var arr=str.split(固定切割符/RedExp);
2、替换
基本替换法
str=str.replace(正则表达式/gi"新内容");
注意;替换时,不要前加^后加$,我们不需要完全匹配,只需要找到关键字做途欢而已,
想要替换所有的一定要加后缀g
问题:替换的新东西,只能是固定的
高级替换法;
str=str.replace(/[我卧握窝][去草操槽曹]+g,function(key,i,str){//此回调函数会自动调用,
找到几个关键字就会执行几次
console.log(key);//当前次正则匹配到的关键字
cosonle.log(i);当前次正则匹配到的关键字的下标
cosonle.log(str);//原文本身
return key.length==2?"**":"**";
格式化:如果替换时,正则中带有分组,那么你的回调函数会得到更多的形参
var str="500103198602215933"
var reg=/\d{6}(\d{4})(\d{2})\d{4}/;
str=str.replace(reg,function(key,a,b,c,i,str){
cosonle.log(key);//正则匹配到的内容
cosonle.log(a);//第一个分组匹配到的内容
cosonle.log(b);//第二个分组匹配到的内容
cosonle.log(c);//第三个分组匹配到的内容
你有多少个分组就会多出多少个形参,但是最后两个一定是下标和原文
cosonle.log(i);
cosonlr.log(str);
return a+"年"+b"月"+c"日";
}
正则对象*****
创建:
1. 直接量方式:var reg=/正则表达式/后缀:
2. 构造函数方式:var reg=new RegExp("正则表达式""后缀");
- 方法
验证:var bool=reg.test("用户输入的东西");
true->用户输对了 false->用户不通过