正则的作用:
1、对表单域项目(用户名、密码、邮箱、qq号码、手机等等)进行验证
2、网络爬虫(一个网站到另一个网站的页面上去获取对方的相关信息)
3、内容替换、获取
4、前台的验证、正则处理满足条件的字符串(网络爬虫 Python编程)数据采集(大宗点评:商家评论 抓取) curl函数库:模拟http请求。
创建方式
//字面量
var reg = /hello/;
console.log(reg); // /hello/
//构造函数
var reg = new RegExp('hello');
console.log(reg); // /hello/
正则匹配的方法
1.test()方法
- 判断正则表达式是否匹配成功
- 成功返回true,失败返回false
var str = 'aabcaa';
//var obj = new RegExp('aaa'); //false
var obj = /aa/; //true
//匹配str中是否有obj的内容,有就返回true,没有返回false
var reg = obj.test(str);
document.write(reg);
2.exec()方法
- 匹配符合正则表达式条件的数据
- 成功返回数组
- 失败返回null
var str = 'aabcaaefaa';
// var obj = new RegExp('aaa','g'); //null
//g表示全局匹配
var obj = /aa/g;
document.write(obj.exec(str));
var row;
while(row = obj.exec(str)){
document.write(row); //aaaaaa
}
3.search() 方法
- 语法:字符串对象.search(待查找的字符串|正则)
- 作用:用于搜索字符串中指定的元素
- 返回:返回符合条件的第一个元素下标,没找到返回-1
var str = "hello world world";
var reg = str.search(/world/);
console.log(reg); //6
var reg1 = str.search('world');
console.log(reg1); //6
var reg2 = str.search("aa");
console.log(reg2); //-1
4.match()方法
- 语法:字符串对象.match(待匹配的字符串|正则表达式)
- 作用:匹配符合条件的内容
- 返回:返回一个数组,失败返回null
var str = "hello world world";
var reg = str.match(/word/g);
console.log(reg); //["world", "world"]
var reg1 = str.match('aa');
console.log(reg1); //null
5.replace() 方法
- 语法:字符串对象.replace(待匹配的字符串|正则表达式,替换的内容)
- 作用:用于替换字符串中的数据
- 返回:返回新的字符串(替换后的字符串)
var str = "hello world world";
var reg = str.replace('world','js');
console.log(reg); //hello js world
var reg1 = /world/;
console.log(str.replace(reg1,'hello')); //hello hello world
var reg2 = /world/g;
console.log(str.replace(reg2,'js')); //hello js js
正则语法
说明 | 正则 |
---|---|
匹配a-z任意一个字符 | [a-z] |
匹配A-Z任意一个字符 | [A-Z] |
匹配26个英文字母(大小写) | [a-zA-Z] |
匹配一个数字 | [0-9] |
匹配一个字符可以是数字、字母和下划线 | [0-9a-zA-Z_] |
匹配非数字,^表示取反 | [^0-9] |
匹配非字母,^表示取反 | [^a-zA-Z] |
匹配数字,相当于:[0-9] | \d |
匹配非数字,相当于[^0-9] | \D |
匹配数字、字母、下划线,相当于:[0-9a-zA-Z_] | \w |
匹配非数字、字母、下划线,相当于:[^0-9a-zA-Z_] | \W |
匹配空白字符串(空格) | \s |
匹配非空白字符串 | \S |
匹配所有字符 | . |
指重复0到多次,如:/8*/ 可以出现,也可以没有 | * |
指重复1到多次,至少出现一次 /a+/,如:/8+/ 至少有一个8 | + |
指重复0到1次,最多一次,如:/8?/ 最多有一个8 | ? |
指匹配n次,如:/8{3}/ 含义出现3次,也就是 888 | {n} |
指匹配n到m次,如:{1,8} 匹配1~8次 /a{1,8}/ | {n, m} |
指匹配至少n次,如:/8{3,}/ 含义出现至少3,连续8,如88888 | {n, } |
限定行首数据 | ^ |
限定行尾数据 | $ |
utf8检测:[\u4E00-\u9FA5]
1.手机号隐藏中间四位
var str = '18336622568';
var reg = /^(\d{3})\d{4}(\d{4})$/;
// console.log(reg.test(str));
// $1表示第一个小括号匹配到的内容
// $2 表示第二个小括号匹配到的内容
var newStr = str.replace(reg,'$1****$2');
console.log(newStr); //183****2568
$n是在字符串的替换函数replace中使用到,替换满足正则条件的字符串。
2.表单验证
//body
用户名:<input type="text" name="" id="user" value="" /><span></span><br />
密码:<input type="text" name="" id="pass" value="" /><span></span><br />
重复密码:<input type="text" name="" id="pass2" value="" /><span></span><br />
<input type="button" name="btn" id="btn" value="提交" />
//js
// 1.用户名 用户名仅支持中文、字母、数字、“-”“_”的组合,4-20个字符
// 2.密码的规则 数字字母特殊字符,一种类型,弱。两种类型为中,三种类型为强,6-20个字符
// 3.重复密码 跟第一次输入 密码一致
// 4.提交按钮的时候,判断所有输入数据是否符合。符合跳转,否,不跳
var ouser = document.getElementById("user");
var opass = document.getElementById("pass");
var opass2 = document.getElementById("pass2");
var obtn = document.getElementById("btn");
// 每个输入框的状态:成功/失败,初始为失败
var x = false;
var y = false;
var z = false;
ouser.onblur = function(){
//用户名的正则
var reg = /^[\w\-\u2E80-\u9FFF]{4,20}$/
if(reg.test(this.value)){
this.nextElementSibling.innerHTML = "可以使用";
x = true
}else{
this.nextElementSibling.innerHTML = "不符合规则,请输入中文、字母、数字、“-”“_”的组合,4-20个字符";
x = false
}
}
opass.onblur = function(){
if(this.value != opass2.value && opass2.value != ""){
opass2.nextElementSibling.innerHTML = "两次不一致";
z = false
}
if(this.value.length>=6 && this.value.length<=20){
// 三种情况的开关的定义,出现了一种就对应的改成1
var a = 0;
var b = 0;
var c = 0;
//是否出现数字的正则
var numReg = /\d+/g;
// if(numReg.test(this.value)){
// a = 1
// }else{
// a = 0;
// }
a = numReg.test(this.value) ? 1 : 0;
//是否出现字母的正则
var azReg = /[a-zA-Z]+/g;
// if(azReg.test(this.value)){
// b = 1
// }else{
// b = 0;
// }
b = azReg.test(this.value) ? 1 : 0;
//是否出现特殊的正则
var tsReg = /[^a-zA-Z0-9]+/g;
// if(tsReg.test(this.value)){
// c = 1
// }else{
// c = 0;
// }
c = tsReg.test(this.value) ? 1 : 0;
// 三种情况都判断之后,验证开关的结果
var str = ""
switch(a+b+c){
case 1:
str = "简单";break;
case 2:
str = "一般";break;
case 3:
str = "困难";break;
}
this.nextElementSibling.innerHTML = str;
y = true;
}else{
this.nextElementSibling.innerHTML = "长度不符合";
y = false
}
}
opass2.onblur = function(){
if(this.value == opass.value){
this.nextElementSibling.innerHTML = "一致";
z = true
}else{
this.nextElementSibling.innerHTML = "两次不一致";
z = false
}
}
// 判断所有输入框的状态
obtn.onclick = function(){
if(x&&y&&z){
alert("提交成功")
}else{
alert("提交失败")
}
}