***正则表达式:专门规定字符串中字符串的规律
何时使用:今后只要规定字符串格式时
比如:验证字符串格式
查找:模糊查找
替换/格式化字符串
切割字符串
语法:
1.最简单的正则:就是关键字原文
2.备选字符集:规定了*某一位可选字符列表*
必须且只能多选一匹配:语法[备选字符类表]
PS:如果备选字符中部分unicode连续,可用 - 省略中间的字符
常用省略:一位数组:[0-9] ;一位小写字母:[a-z];
3.预选备选字符集:
\d -->[0-9]
\w-->[0-9a-zA-Z]
\s-->所有空字符:空格,制表符,换行
\大写 -->\小写的反义
\. -->除了换行和回车后的任意字符
4.量词:规定相邻的前一个字符集出现的次数
如何使用:紧跟在一个字符集之后
数值数量:{min,max};{min,};{n}:必须n个
不确定数量:?可有可无,最多一个
*可有可无,数量不限
+至少1个,多了不限
5.选择和分组:
选择:或| 分组:()
6.转义:\
7.匹配指定位置:
^匹配开始位置的xxx,比如:^\s+ 匹配字符串开头的空字符
$匹配结束位置的xxx,比如:\s+$ 匹配字符串结尾的空字符
匹配开头或结尾的空字符:^\s+|\s+$
前加^后加$,且中间没有:^xxx$必须和正则完全匹配
***今后 ,做验证: 都要前加^,后加$
\b:表示单词边界:比如\bno\b,只找单词no
8.预读:在正式匹配前,先大概预判整个字符串的规则,多用于排除法
比如:密码强度:6-8位数字,必须包含一个大写和一个数字
所有字符:4大类:数字,小写字母,大写字母,特殊符号
1.排除:不全由数字,小写字母组成:
结论:可能包含大写字母或特殊符号
(?![0-9a-z]+$)
2.排除:不全由大写字母和小写字母组成
结论:可能包含数字和特殊符号
(?![a-zA-Z]+$)
3.只能由字母或数字组成 --排除了特殊符号
最终:^(?![0-9a-z]+$) (?![a-zA-Z]+$) \w{6,8}$
9.汉字备选字符集范围:[\u4e00-\u9fa5]{3,5}
2.***js中String支持正则的API:
reg:正则表达式对象:
创建正则表达式:var reg=/正则表达式/属性后缀
属性后缀:i 忽略大小写!
g全部,全局,查找或替换全部匹配内容
查找:2种
1.只判断是否包含关键字:不考虑具体内容和个数
var i=str.search(reg); --只能判断有没有关键字
只能返回第一个找到的关键字的位置;找不到,返回-1
2.获取所有关键字的内容,而不考虑位置
var kwords=str.match(reg);
返回所有关键字的内容,保存在kwords数组中
***找不到,返回null,都要先判断不为null,再使用
kwords.length,如果kwords为null,则报错。
替换或删除子字符串:
var newStr=str.replace(reg,"替换字符");
替换时防止null
var kwords=reply.match(reg);
if(kwords){
var n=kwords.length;
reply=reply.replace(reg,"**");
console.log(reply);
}else {
console.log("没找到")
}
例:
/*去掉字符串开头或结尾的空字符*/
function ltrim(){//只去掉开头的空字符
//定义正则表达式只匹配开头的空字符,保存在reg中
var reg=/^\s+/;
//替换str中满足reg规则的子字符串为“”。并返回
return str.replace(reg,"");
/*return srt.replace(/^\s+/,"")*/
}
function rtrim(){//只去掉结尾的空字符
//定义正则表达式只匹配开头的空字符,保存在reg中
//替换str中满足reg规则的子字符串为“”。并返回
return srt.replace(/\s+$/,"");
}
function trim(){//同时去掉开头或结尾的字符
//定义正则表达式只匹配开头的空字符,保存在reg中
//替换str中满足reg规则的子字符串为“”。并返回
return srt.replace(/^\s+|\s+$/g,"");
}
var str="\t Hello World \t";
console.log(ltrim());
格式化字符串:
正则表达式中的每个(),都是一个子表达式
每个子表达式都会自动获得一个1开始的编号
分割字符串:
var subs=str.split(reg[,count]); 字符串一切开得到的是数组
var msg="Tom@补给兵@60%#Mary@医护兵@80%#Johm@特种兵@30%"
function show(){
//按#切割msg,将结果保存在riles中
var roles=msg.split(/#/);
//遍历roles中每个角色字符串
for(var i=0;i<roles.length;i++){
//再按@切割当前角色字符串,结果保存在arr中
var arr=roles[i].split(/@/);
//输出:“名 兵种 生命:值”
console.log(arr[0]+""+arr[1]+"生命:")
}
}
3.***RegExp对象:
何时使用:只要在js中使用正则表达式,都要先创建RegExp对象
如何创建:2种:
1.直接量:var reg=/正则表达式/[ig];
如何使用:使用固定的正则表达式时
2.使用new:var reg=new RegExp("正则表达式"[,"ig"]);
何时使用:如果正则表达式需要动态拼接
new RegExp("^\d{6}$")
正则API:2个
查找:4种:
1.查找固定关键字, 仅返回位置。可指定开始位置:
var i=str.indesxOf("kword"[,stari]);
何时使用:关键字确定
通过循环,反复获得每个关键字的位置
2.只判断有没有:var i=str.search(reg);
3.获取所有关键字的内容:var kwords=str.match(reg);
返回值:找到返回值关键字内容的数组
没找到返回null,必须先判断不是null,再使用
4.即获得每个关键字的内容,又获得每个关键字的位置:
var arr=reg.exec(str)
特点:1.每次只返回一个关键字的内容,存在arr的[0];如果找不到,返回null
2.将本次找到的关键的位置保存在arr.index
3.自动调整reg.lastindex属性为下次开始的位置
正则:补充
1.默认贪婪模式:尽量匹配最长的符合条件的字内容
懒惰模式:只匹配最短的符合条件的字内容
贪婪 改 懒惰: .* -->(.*?) 用一个问号阻止贪婪模式继续,只要出现就改成懒惰模式
2.RegExp.$n:获得本次匹配中第n个子表达式匹配的内容
3.替换:str=str.replace(reg,替换);
如果reg中没有g,只替换第一个匹配的
4.验证:var bool=reg.test(str);
如果str符合reg的要求,返回true,说明验证通过;否则返回flase,说明验证不通过。
强调:凡是验证,前加^后加$,如果不加,只要局部匹配,就通过。
案例:页面中找表单: var form=document.forms["id"|i]
form是封装了表单所有内容的对象;提供了提交表单的方法
form.submit();手动提交表单。
在表单中找元素:var input=form.elements["name"]
input是封装了一个input元素所有属性的对象
input.value属性,获得用户输入的内容字符串