正则表达式:规定字符串中字符出现规律的公式

如果备选字符列表中个别字符之间是连续的,可用-省略中间的字符。比如:

匹配1位数字:   [0-9]
匹配1位小写字母 : [a-z]
匹配1位大写字母 : [A-Z]
匹配1位字母 :   [a-zA-Z]
匹配1位汉字: [\u4e00-\u9fa5]

字符集开头,使用^表示除了xx,但除xx外一切字符都行!范围太大了。

预定义字符集: 对常用字符集的简化标识

[0-9] 一位数字 :           \d
[0-9A-Za-z_] 一位字母,数字或下划线: \w
换行,空格,tab 一位空字符 : \s
除回车换行外,任意一个字符    .

量词:规定字符集出现次数的规则 用于字符集之后,默认修饰相邻的前一个字符集

有明确数量的量词:

最少m次,最多n次   :{m,n}
最少m次,多了不限   : {m,}
必须m次        : {m}

没有明确数量的量词:
可有可无,最多1次   ?
可有可无,多了不限    *
至少一次,多了不限   +

正则中如果正文和正则保留字冲突,也可用\转义

  1. 分组和选择:

选择:或 正则1|正则2 只要满足任意一个正则即可

分组:() ()扩起的子表达式称为一组

数量词放在()之后,则修改一组出现的次数 如:(去){2}

*****分组编号: 正则中每个(),对会自动生成从1开始的编号。如果后边想匹配和前边某个分组完全相同的内容,可用\n匹配。

例子:

(\d{3,2})\1*

\d{15}(\d{2}[0-9Xx])? // 身份证号

(+86|0086)?\s*1[34578]\d{9} //手机号

  1. 指定匹配位置: 【前加^,后加$ 从头到尾完整匹配 - 验证】

^ 开始位置的 一般用于正则开头,匹配开始位置的x 以xxx开头的 写在字符集外

$ 结束位置前的x 一般用于正则结尾 以xxx结尾的

例子:

^\s+   // 匹配开头位置的多个空字符

\s+$     // 匹配结尾位置前的多个空字符

^\s+|\s+$ // 匹配开头或结尾的空字符

单词边界: \b 一个单词开头或结尾的空字符,用于区分一个完整的单词;

例子:

no zuo no die nothing
// \bno\b 只匹配前面两个单词“no”,不匹配后面nothing中的no

  1. 预判: 提前检查整个字符串是否符合个别要求 (?!)

比如: 密码强度要求: 至少包含一位大写字母 至少包含一位数字 8位字符,必须是字母,数字的组合 [0-9a-zA-Z]{8}

排除法:

  1. 判断从开头到结尾不全由小写字母和数字组成
    结论: 可能包含大写字母 或 特殊符号

(?![0-9a-z]+ios正则的后向零宽断言 正则alt=""_字符串表示强制检查到句末;

  1. 判断从开头到结尾不全由字母组成(大写和小写)
    结论: 可能包含数字 或 特殊符号

(?![a-zA-Z]+$)

  1. 只能由数字和字母组成(排除特殊符号):

(?![0-9a-z]+ios正则的后向零宽断言 正则alt=""_正则表达式_02)[0-9a-zA-Z]{8}

正则API

仅判断是否包含: var i=str.search(/reg/)

reg表示一个正则,用//括起来 在str中查找第一个和reg匹配的关键词, 找到返回位置下标,没找到,返回-1 无法设置开始位置

获得所有关键词的内容: var arr=str.match(/reg/gi);

【返回的值是一个数组】 如果找全部:第二个/后加g 如果忽略大小写: 第二个/后加i      无法获得每个关键词的位置

替换: 找到str中的和reg匹配的关键词,替换为新内容 str=str.replace(/reg/gi,“替换内容”);

无权修改原字符串,只能返回新字符串 默认也只能替换第一个,加g后才能替换所有

格式化: 将正则表达式匹配的内容,替换为新的格式

2步: 1. 用正则表达式将要格式化的字符串分组

2. 在replace的第二个参数中使用$n代替分组匹配的内容,组成新格式。

用正则将匹配内容分成几组,$1表示第一句内容,$2表示第二组。。。类推;再使用replace将添加的内容加上

复制代码
var pid=“110102198312262111”;
var birth=pid.slice(6,6+8);   //19831226

var reg=/(\d{4})(\d{2})(\d{2})/;         //Step1: 使用正则将原字符串分组
                                     //Step2: 将原字符串,替换为新的格式    
birth=birth.replace(reg,"$1年$2月$3日");  //$1=1983  $2=12  $3=26
console.log(birth);                  //1983年12月26日

复制代码

切割: var arr=str.split(/reg/); 将字符串按照正则匹配进行切割,返回数组

即查找关键词内容,又查找关键词位置: 返回数组 var arr=reg.exec(str);

强调:如果查找全局,reg要加g arr.index :发现关键词的位置 arr[0] :关键词的内容

执行过程: 从str的开始位置,找下一个匹配的关键词 ,将找到的一个关键词放入arr中第1个元素 ,为arr添加index属性,标识当前关键词的位置

如何使用:只要使用循环反复调用即可 ,exec可自动修改RegExp对象的lastIndex属性,RegExp的lastIndex属性定义了下次开始位置 ,如果没找到,返回null

复制代码

var html=‘go to tmoocgo to tedu

标题1

’; 

 var reg=new RegExp("<a\s+[ 
>]*href=["|’]([^’"]+)["|’][>] 
>.?",“gi”) 

 var arr=null; 

 while((arr=reg.exec(html))!=null){ //反复调用reg的exec方法,传入参数html,将结果保存到arr中,再判断不等于null 

 console.log("在位置 “+arr.index +” 发现: "+arr[0]); 

 }



复制代码

验证字符串格式 var bool=reg.test(str);

返回值: 验证通过,返回true,否是返回false 【强调:reg都要前加^,后加$】

复制代码
var reg=/^(?![a-z0-9]+ios正则的后向零宽断言 正则alt=""_正则表达式_02)[a-zA-Z0-9]{6,16}$/;

//反复调用reg的test方法,请用户输入密码直接作为参数,只要验证*不*通过,          就继续循环
while(!reg.test(prompt("输入新密码"))){

    alert("密码强度不够!");
}//(循环结束)
alert("密码修改成功");//提示密码修改成功

复制代码

RegExp对象: 封装一个正则表达式,提供用正则表达式进行验证和查找的方法。

如何创建:

  1. 直接量: var reg=/正则/gi;
  2. 示例化对象: var reg=new RegExp(“正则”,“gi”)

嘉爷