首页 > 代码库 > 正则表达式
正则表达式
一、 正则的概念
(一) 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。
二、 创建方式
(一) 使用RegExp这个对象,第一个参数就是我们的模式字符串,第二个参数可选,模式修饰符
1. Var 变量名 = new RegExp(“正则表达式”,”标志位”);()
var reg = new RegExp(“study”,”ig”); //i:表示忽略大小写。g:表示全局匹配。
2. 用常量方式直接声明
var 变量名 = /正则表达式/标志位
var reg = /study/ig;
三、 正则表达式
(一) 扩展:测试正则表达式test方法
1. 正则表达式对象名.test(“字符串”):用于检测提供的目标字符串是否包含正则表达式的匹配内容,如果包含返回true,否则返回false
1) Var reg = /study/;
reg.test(“Study”) //false
reg.test(“study”) //true
除了匹配相等以外,还可以匹配更复杂的规则
“good good study,day day up”判断是否包含符合该正则的内容
(二)扩展:测试正则表达式exec方法(争议较大)能将匹配到的内容添加到一个数组中。
1. 正则表达式对象名.exec(“字符串”):用于在字符串中查找指定正则表达式,如果exec()方法执行成功,则返回包含该查找字符串的相关信息数组。如果执行失败,则返回null。
1) Var pattern = /box/i;
var str = “This is a Box!”;
alert(pattern.exec(str));
(三) 元字符(三、三、二、三个一)共计11个元字符
1. 三:{}[]()
1) {}:表示括号前面的一个字符(or一组字符)连续出现的次数
{m}:表示括号前面的一个字符只能
连续出现m次
{m,}:表示至少出现m次,即m~无限次
{m,n}:表示至少出现m次,最多出现n次,即m~n次
2) []:表示范围
a) [\u4e00-\u9fa5]:表示中文的范围(16进制中字母大小写不区分)(\u表示unicode编码)
b) [^\u4e00-\u9fa5]:表示非中文
^表示取反。
c) [^a-zA-Z]:表示非字母
d) [^0-9]:表示非数字
e) [^ ]:表示非空格
3) ():表示组
2. 三:* + ? :表示前面字符连续出现的次数
1) * :等同于{0,}表示0~无限次↓
*前面的一个或一组字符在字符串中连续出现0至无限次。
2) + :等同于{1,} 表示1~无限次,至少出现1次↓
+前面的一个字符或一组字符在字符创中连续出现1至无限次。
3) ?:等同于{0,1}表示0~1次,最多可出现1次,可以不出现↓
+前面的一个字符或一组字符在字符创中连续出现0至1次。
3. 二:^ $
1) ^ :定(断)头 : 表示必须以^后面的一个字符开头
2) $ :定(断)尾 :表示必须以$前面的一个字符结尾
(四) 三个一: . | \
1. . : 表示模糊匹配,一个点可以匹配一个任意字符(在未指定次数的情况下默认一个)
2. |:表示或
3. \ :表示转义字符(转义字符:把具有特殊含义的符号转成一般字符)
1) \d: 表示数字 [0-9]
2) \D: 表示非数字[^0-9]
3) \w: 表示字母、数字、下划线 [a-zA-Z0-9_]
4) \W: 表示非字母、数字、下划线 [^a-zA-Z0-9]
5) \s: 表示空白符
6) \S: 表示非空白符
(五) 扩展:案例分析
1. var pattern = /(google){4,8}/; //匹配分组里的字符串 4-8 次
var str = ‘googlegoogle‘;
alert(pattern.test(str)); //false
2. var pattern = /(google|baidu|bing)/; //匹配三种其中一种字符串
var str = ‘google‘;
alert(pattern.test(str)); //true
3. var pattern = /goo\sgle/; //\s 可以匹配到空格
var str = ‘goo gle‘;
alert(pattern.test(str)); //true
4. var pattern = /google\b/; //\b 可以匹配是否到了边界 \b表示单词边界
var str =
‘google‘;
var str2= ‘googleaa googlexx google dsdddd‘;
alert(pattern.test(str)); //true
5. var pattern = /g\w*gle/; //\w*匹配任意多个所有字母数字_
var str = ‘google‘;
alert(pattern.test(str)); //true
6. var pattern = /google\d*/; //\d*匹配任意多个数字
var str = ‘google444‘;
alert(pattern.test(str)); //true
7. var pattern = /\D{7,}/; //\D{7,}匹配至少 7 个非数字
var str = ‘google8‘;
alert(pattern.test(str)); //false
8. var pattern = /g[a-zA-Z_]*gle/; //[a-z]*表示任意个 a-z 中的字符
var str = ‘google‘;
alert(pattern.test(str)); true
9. var pattern = /g[^0-9]*gle/; //[^0-9]*表示任意个非 0-9 的字符
var str = ‘google‘;
alert(pattern.test(str));
- var pattern = /[a-z][A-Z]+/; //[A-Z]+表示 A-Z 一次或多次
var str = ‘gOOGLE‘;
alert(pattern.test(str)); - var pattern = /g.*gle/;
var str = ‘google‘;
alert(pattern.test(str)); - var pattern = /^[a-z]+\s[0-9]{4}$/i;
var str = ‘google 2012‘;
alert(pattern.exec(str)); - var pattern = /^[a-z]+/i;
var str = ‘google 2012‘;
alert(pattern.exec(str)); - var pattern = /^([a-z]+)\s([0-9]{4})$/i;
var str = ‘google 2012‘;
alert(pattern.exec(str)[0]); ←[0]是父级,代表整个正则表达式匹配到的内容
alert(pattern.exec(str)[1]); ←google父级下的第一个子级
alert(pattern.exec(str)[2]); ←2012父级下的第二个子级
四、 字符串replace()函数
(一) 使用replace替换匹配到的数据
1. Var pattern = /Good/ig;
var str = “good good study!,day day up!”;
alert(str.replace(pattern,’hard’));//将Good替换成了hard
2. var pattern = /(.*)\s(.*)/;
var str = ‘google baidu‘;
var result = str.replace(pattern, ‘$2 $1‘); //将两个分组的值替换输出
document.write(result);
3. var pattern = /8(.*)8/;
var str = ‘This is 8google8‘;
var result = str.replace(pattern,‘<strong>$1</strong>‘); //得到替换的字符串输出
document.write(result);
五、 字符串match()函数
(一) 使用match方法获取匹配数组
1. Var pattern = /good/ig; //全局搜索
var str = ‘good good study!,day day up!’;
alert(str.match(pattern));
alert(str.match(pattern).length);
2. var pattern = /8(.*)8/; //获取 8..8 之间的任意字符
var str = ‘This is 8google8, dd 8ggg8‘;
alert(str.match(pattern));
alert(RegExp.$1); //得到第一个分组里的字符串内容
六、 字符串search()函数
(一) 使用search来查找匹配数据的下标位置
1. var pattern = /good/ig;
var str = ‘good good study!,day day up!’;
alert(str.search(pattern)); //查找到返回位置,否则返回-1
(二)
第二节:应用
一、 掌握正则的创建方式
二、 掌握正则表达式语言
三、 邮政编码检测
四、 文件格式检测
五、 字符串首尾去空格
六、 邮件格式检测
第三节
一、 手机号检测
(一) / 1(3|5|7|8|4)[\d]{9}/
(二) /1\d{10}/
二、 身份证检测
/^[1-9]\d{5}[1-9]\d{3}(0[1-9] |1[0-2])(0[1-9]|(1|2)\d|3[01])\d{3}(\d|x|X)$/
三、 日期检测
(一) Xxxx年xx月xx日 :/(\d{4}|\d{2})年(\d{1,2})月(\d{1,2})日/
2017年3月29日
17年3月29日
(二) 12/25/2016 : (\d{1,2})/(\d{1,2})/(\d{4}|\d{2})
(三) 类似"12:59:59"的标准时间: /[\d]{1,2}:[\d]{1,2}:[\d]{1,2}/
(四) 类似"June 6,2014"的日期 : /([a-z]+) ([\d]{1,2}),([\d]{2,4})/
四、 中文检测
(一) /[\u4e00-\u9fa5]/
五、 用户名检测
(一) 用户名由 3-10位的字母下划线和数字组成。不能以数字或下划线开头。只能已字母开头。允许全部是字母。
- ^[a-zA-z][a-zA-Z0-9_]{2,9}$;
- /^[a-z]\w{2,9}$/i;
六、 字符串过滤(首尾空格)
第四节:应用
一、 表单及AJAX的综合应用
第五节:综合应用
一、 掌握正则的封装
二、 掌握综合表单验证
正则表达式