第三周Day3

118 阅读1分钟

正则表达式:

什么是正则表达式:定义字符串中【字符出现规则】的一个表达式;

何时使用:切割  替换  【验证】
如何使用:语法:/正则表达式/
    1,最简单的正则:关键字原文    "关键字"  ->     /关键字/gi只要用上正则就可以添加后缀
        g:全部		i:忽略大小写
    2,备选字符集:/[ 备选字符集 ]/
强调:1、一个中括号,只管一位数字;
          2、正则表达式【默认只要满足条件,不管其他的】,解决:前面加^,后面加$:/^[备选字符集]$/
		代表要求:用户从头到尾必须完整匹配我们的要求 - 只要是做验证就必然前加^ 后加$
特殊:如果备选字符集中的ascii码是连续的,中间的部分我们可以用 - 代替
		一个数字:[0-9]
		一个字母:[A-Za-z]
		一个数字,字母,下划线:[0-9A-Za-z_]
		一个汉字:[\u4e00-\u9fa5]	
		除了数字之外的:[^0-9]   很少使用,范围太广了;

预定义字符集:前辈们提前定义好的,我们直接使用的

目的:简化备选字符
    一个数字:\d                    ===    [0-9]
    一个数字,字母,下划线:\w       ===    [0-9A-Za-z_]
    一位空白字符:\s                ===    包含空格,换行,制表符
    一位除了换行之外的任意字符:.    ===    很少使用,范围太广了

建议:优先使用预定义字符集,满足不了的时候在使用备选字符集自定义

问题:不管是本选字符集还是预定义字符集,一个都只能管一位

量词:规定一个字符集的出现次数

有明确数量:

字符集{n,m}:前边相邻的字符集,最少出现n次,最多出现m次
字符集{n,}:前边相邻的字符集,最少出现n次,多了不限
字符集{n}:前边相邻的字符集,必须出现n次,多了少了都不行

无明确数量:

字符集?:前边相邻的字符集,可有可无,但最多出现一次;
字符集* :前边相邻的字符集,可有可无,多了不限;
字符集+ :前边相邻的字符集,至少出现一次,多了不限;

选择和分组:

选择:多个规则中选择其中一个
    规则1|规则2
分组:将多个字符集临时组成一组规则
    (规则1|规则2)

指定匹配位置:

^:开头
$:结尾
特殊:如果两者同时出现,要求从头到位完全匹配  -   只要是做验证就必须加上

预判:

预判公式:
    (?![0-9]+$)        -> 不能全由数字组成
    (?![A-Za-z]+$)     -> 不能全由英文组成
    (?![A-Za-z0-9_]+$) -> 不能全由数字组成,也不能全由小写组成,也不能只由数字和小写的组合组成

字符串中支持正则表达式的API:

1、切割:
    var arr=str.split("固定切割符"或regexp)
2、替换:
    1.基础替换法:
        var newStr=str.replace("固定关键字"/regexp,"新内容")
        
    2.高级替换法:
        var newStr=str.replace("固定关键字"/regexp,function(a,b,c){
            console.log(a);//第一个形参保存的是正则匹配到的每一个关键字
            console.log(b);//第二个形参保存的是正则匹配到的每一个关键字的第一个字符的下标
            console.log(c);//原文本身
            return a.length==2?"**":"***";
            });
3、格式化:在使用replace替换时,如果搭配上了正则,并且正则中加入了分组,
           那么有几个分组,高级替换法中就会多几个参数;
       var newStr=str.replace("固定关键字"/regexp,function(a,b,c,d,e,...){
            console.log(a);//第一个形参保存的是正则匹配到的每一个关键字
            console.log(b);//第二个形参保存的是正则中第一个分组匹配到的关键字
            console.log(x);//第三个形参保存的是正则中第二个分组匹配到的关键字
            ...依次类推
            console.log(d);//倒数第二个形参保存的是正则匹配到的每一个关键字的第一个字符的下标
            console.log(e);//倒数第一个形参保存原文本身
            return b+"月"+c+"日";
            });

正则对象:API

1,创建正则对象:

直接量方式:
var reg=/正则表达式/后缀;
构造函数方式:
var reg=new regExp("正则表达式","后缀");

为什么有时候要 - 前加^后加$, 或者加后缀;

验证时:前加^后加$ - 用户要和我们的规则完全匹配
替换时:加后缀g  - 要替换全部,不加的话只会替换第一个 

API:var bool=/正则表达式/.test(用户输入的内容);

返回true,说明用户验证成功,否则验证失败