正则表达式概念
正则表达式是一个模式,可以用来校验、提取、替换数据(主要处理字符串)。
正则表达式的创建
1.字面量方式创建(常用):
var reg = / 规则 /;
2.构造函数方式创建
var reg = new RegExp();
//注意:new可以省略
var reg = RegExp();
正则表达式的方法
1.test(验证)
语法:
正则表达式.test(String) // String表示要检测的字符串
作用:
验证该字符串是否满足规则
返回值:
满足规则,返回true
不满足规则,返回false
//案例
var reg = /\d/; // \d 表示任意一个数字(0-9)
var str = '5';
var res = reg.test(str); // 验证这个字符串是否满足这个规则,即str里面的数据是否是0-9之间的数字
console.log(res); // true
2.search(验证/查找)
语法:
string.search(正则表达式) // String表示要检测的字符串
作用:
在字符串中查找满足正则表达式的那部分
返回值:
满足规则,返回对应下标
不满足规则,返回-1
//案例
var reg = /\d/; // \d 表示任意一个数字(0-9)
var str = 'abc2defg';
var res = str.search(reg); // 验证这个字符串是否满足这个规则,即str里面的数据是否是0-9之间的数字
console.log(res); //3
3.exec(提取)
语法:
正则表达式.exec(String) // String表示要检测的字符串
作用:
把字符串中满足规则的部分提取出来,组成一个新的数组并返回
返回值:
满足规则,返回数组(把满足规则的部分存进该数组)
不满足规则,返回null
//案例
var reg = /\d/; // \d 表示任意一个数字(0-9)
var str = 'abcd2efg';
var res = reg.exec(str);
console.log(res); // [ 2 ]
console.log(res[0]); // 也可以通过下标将该元素输出
4.match(提取)
语法:
String.match(正则表达式) // String表示要检测的字符串
作用:
把字符串中满足规则的部分提取出来,组成一个新的数组并返回
返回值:
满足规则,返回数组(把满足规则的部分存进该数组)
不满足规则,返回null
// 案例
var reg = /\d/; // \d 表示任意一个数字(0-9)
var str = 'abc2defg';
var res = str.match(reg);
console.log(res); // [ 2 ]
5.replace(替换)
语法:
String.replace(正则表达式,新内容) // String表示要检测的字符串
作用:
把满足规则的内容替换掉
返回值:
满足规则,返回数组(把满足规则的部分存进该数组)
不满足规则,返回null
// 案例
var reg = /\d/; // \d 表示任意一个数字(0-9)
var str = '1是一';
var ment = '*'; //定义要替换的新内容
var res = str.replace(reg,ment);
console.log(res); //*是一
元字符
元字符概念
正则表达式元字符是包含特殊含义的字符。它们有一些特殊功能,可以控制匹配模式的方式。
常用元字符
\d | 代表任意一个数字 - [0-9] |
---|---|
\D | 代表任意一个非数字 |
\w | 代表任意一个数字、字母、下划线 |
\W | 代表任意一个非数字、字母、下划线 |
.(点) | 代表任意一个字符 |
\s | 代表任意一个空格 |
\S | 代表任意一个非空格 |
^ | 规定以什么开头 |
$ | 规定以什么结尾 |
// 案例:QQ号正则表达式
// 要求:5~12位的数字,不能用0开头
var reg = /^[1-9]\d{4,11}$/;
var str = "10086";
var res = reg.test(str);
console.log(res);
限定符
* | 重复零次或更多次 |
---|---|
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
//案例:{n}
//var reg = /\d/; //该规则只能提取一位数字
//但是我们要提取2位数字
var reg = /\d{2}/; //括号里面的数字为几就提取多少位数字
var str = "abc12gg";
var res = str.match(reg);
console.log(reg);//第一次输出1,第二次输出12
//其他限定符同理
修饰符
/规则/g | 贪婪匹配(匹配多次) |
---|---|
/规则/i | 忽略大小写 |
// 案例:贪婪匹配
var reg = /\d+/g;
var str = 'asdf123asd456f789';
var res = str.match(reg);
console.log(res); //["123","456","789"]
// 未贪婪匹配输出[ "123" ]
// 案例:忽略大小写
var reg = /html/gi;
var str = 'i love html very much and HTML is very good';
var res = str.match(reg);
console.log(res); // [ "html","HTML" ]
// 未忽略大小写输出[ "html" ]
扩展
[] 字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思
[^] 取反
| 或者,选择两者中的一个。注意|将左右两边分为两部分,而不管左右两边有多长多乱
[\u4e00-\u9fa5] 匹配汉字
案例:匹配数字
var str = '520我注意你很久了';
var reg = /[\u4e00-\u9fa5]+/;
var res = str.match(reg);
console.log(res); //[ "我注意你很久了" ]
// 案例:取反
var reg = /[^0]/;
// 中括号中的上档键表示取反的意思,非0
var str = '1abcdef';
var res = str.match(reg);
console.log(res);
小测验
相信大家现在对于正则表达式已经有了一定的了解,下面有几道题目可以检测一下大家对于正则表达式的理解情况
// 第一题:邮政编码检测
// 第二题:字符串首尾去空格
// 第三题:手机号码检测
第四题:邮件格式检测
参考答案
// 邮政编码检测
var reg = /\d{6}/;
var str = '123456';
var res = reg.test(str);
console.log(res);
// 字符串首尾去空格
var reg = / (^\s*)\w+(\s*$) /g;
var str = ' ahgd122 '
var res = str.replace(reg,'');
console.log(res)
// 手机号检测
var reg = /^1[34578]\d{9}$/
var phone = '15879712879';
var res = reg.test(str);
console.log(res);
// 邮件格式检测
var reg = /^[a-zA-Z0-9_-]+@([a-zA-Z0-9]+\.)+(com|cn|net|org)$/;
var str = '[email protected]';
var res = reg.test(str);
console.log(res);