最近复习JavaScript发现正则表达式原来如此的重要,但是什么是正则呢?现在就让我们重新了解一下正则的概念及用法。
1、什么是正则
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
2、一般的 应用场景
1)对表单域项目(用户名、密码、邮箱、qq号码、手机等等)进行验证
2)网络爬虫(一个网站到另一个网站的页面上去获取对方的相关信息)
3)内容替换、获取
4) 手机号替换:替换前:13412345678 替换后 134****5678
5) 敏感词替换:
例如:
原字符串:发发达中国辅个钓鱼岛地方规划导共产党
替换后:发发达xxx辅xxx地方规划导xxx
使用最多的是:表单数据的验证.
3、正则的创建
1)字面量创建
语法:var regexp = /正则表达式/修饰符;
注意:一定要加 // , 不需要加引号
例:正则匹配hello
var reg = /hello/;
2)直接实例化
语法:var regexp = new RegExp(“正则表达式”,修饰符);
例:var reg = new RegExp(‘hello’)
以对象的方式创建:需要加单双引号,但是不要加/ /
4、 修饰符说明
标志 说明
i 忽略大小写
g 全局匹配
gi 全局匹配+忽略大小写
例: reg = /hello/g; 匹配全局hello
reg1 = /Hello/i 匹配时不区分大小写
5、RegExp对象方法(使用正则对象调用)
1)test()方法
判断正则表达式是否匹配成功
成功返回true,失败返回false
例1: 下述古诗中是否含有“乘风破浪”?
//创建字符串
var str = '乘风破浪会有时 直挂云帆济沧海';
//var obj = new RegExp('乘风破浪');
var obj = /乘风破浪/;
var ret = obj.test(str);
document.write(ret);
2) exec方法
匹配符合正则表达式条件的数据
成功返回数组
失败返回null
例1:匹配如下字符串中的js ?
//创建字符串
var str = 'js离离原上js草,一岁一枯荣。野火烧不尽,春风吹又生js。远芳侵古道,js晴翠接荒城。又送王孙去,萋萋满别情.';
//创建正则表达式对象
//var obj = new RegExp('js','g');
var obj = /js/g;
//调用exec方法匹配数据(拓展,看一下效果)
document.write(obj.exec(str));
var row;
while(row = obj.exec(str)) {
document.write(row);
}
3)search() 方法
语法:字符串对象.search(待查找的字符串|正则)
作用:用于搜索字符串中指定的元素
返回:返回符合条件的第一个元素下标,没找到返回-1
例1:使用正则搜索字符串中dream
使用正则表达式搜索 "I have a dream!" 字符串
var str = "I have a dream!";
var n = str.search(/dream/);
例2:直接使用字符串做参数
search() 方法使用字符串
search 方法可使用字符串作为参数。字符串参数会转换为正则表达式:
实例
检索字符串中 "dream" 的子串:
var str = 'Ihaveadream';
var res = str.search('dream');
console.log(res)
4)match()方法
语法:字符串对象.match(待匹配的字符串|正则表达式)
作用:匹配符合条件的内容
返回:返回一个数组
例1: 在字符串中查找 "ain":
var str="The rain in SPAIN stays mainly in the plain";
var n=str.match(/ain/g);
输出数组结果值:
ain,ain,ain
5)replace() 方法**
语法:字符串对象.replace(待匹配的字符串|正则表达式,替换的内容)
作用:用于替换字符串中的数据
返回:返回新的字符串(替换后的字符串)
例1: 替换目标字符串,将8换成6
var str = 'js8真厉害88';
console.log(str.replace(/8/g, 6));
例2:查找表单输入字符串中的敏感字符'国军',有则替换为*
<input type="text" placeholder="请输入文字" id="content" value="" /><br/>
<input type="button" value="检测" id="check" /><br/>
//首先获取节点
var chk = document.getElementById('check');
// 检测是否有数字
chk.onclick = function(){
var con = document.getElementById('content').value;
// 注意加g的作用
var reg = /国军/g;
console.log(con.replace(reg,*));
}
6、正则语法
1)正则字符类
元字符 说明
[a-z] 匹配a-z任意一个字符
[A-Z] 匹配A-Z任意一个字符
[a-zA-Z] 匹配26个英文字母(大小写)
[0-9] 匹配一个数字
[0-9a-zA-Z_] 匹配一个字符可以是数字、字母和下划线
[^0-9] 匹配非数字
[^a-zA-Z] 匹配非字母
2)常用字符类(元字符)
元字符 说明
\d 匹配数字相当于 [0-9]
\D 匹配任意非数字的字符 [^0-9]
\w 匹配字母或数字或下划线 [0-9a-zA-Z_]
\W 匹配任意不是字母,数字,下划线 [^0-9a-zA-Z_]
\s 匹配任意的空白符
\S 匹配任意不是空白符的字符
. 匹配除换行符以外的任意单个字符
^ 表示匹配行首的文本(以谁开始)
$ 表示匹配行尾的文本(以谁结束)
3)重复字符(背)(限定符:量词,数量限定)
限定符 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次,最少出现n次
{n,m} 重复n到m次
[] 匹配字符组内的字符 [abc]
( str1 l str2 ) 匹配字符串str1或者str2
例如:
1).邮政编码检测
规律:都是6位,以数字开头和结尾
邮政编码
var str = '012132';
var reg = /^\d{6}$/;
console.log(reg.test(str))
2).文件格式检测
var str='hello world.txt';
var reg=/\.(txt|doc)$/;
console.log(reg.test(str))
注意 .在js中有特殊作用, 使用 \将其转义为普通字符 .
3).字符串首部去除空格
删除空格
var str = " hello world ";
var reg = /\s+/g; //空格至少出现一次,全局匹配
var reg = /^\s+/; // 以空格开头,至少出现一次
var reg = /\s+$/; // 空格至少出现一次,以空格结尾
console.log(str.replace(reg,""))
4).邮箱地址检测
邮箱的规则:数字+字母,3~15位 @ 字母2~9位 . 字母2~3
var str = "chengfeng123@1000phone.com";
var reg = /^[a-z\d]{3,15}@[a-z0-9]{2,9}\.[a-z]{2,3}$/;
console.log(reg.test(str));
7、常用定位符
^ 限定行首数据,以…开头
$ 限定行尾数据,以…结尾
例:判断一个字符串中是以数字开头的
reg = /^\d/;
判断字符串是否以数字结尾
reg = /\d$/
8、分支条件的 “| ”
例1:jpg|png 判断图片格式是否合法
var str = "xxx.jpg";
//先判断一种情况
var regexp = /^.+\.jpg$|^\.png$/;
var regexp = /^.+\.(jpg|png)$/;
//'\.'是把”.“给转义了,只是一个普通的”.",没有任何意义。
例2:判断图片是否是xxx.jpg或者xxx.png结尾的
var regexp = /^.+\.(jpg|png)$/;
var str = 'aa.jpg';
console.log(regexp.test(str));
另外,正则表达式在JavaScript中有多中应用,例如手机号检测、身份证检测、中文检测、用户名检测、字符串过滤等等,要想熟练的掌握正则还需要多加练习才能在工作中不会错误百出。