好好学习 ,天天向上。Are you ready?
一. 什么是正则表达式?
限制字符串的一组正确的规则.
二. 正则表达式的作用?
表单验证
三. 如何定义正则表达式?
1. 字面量的方式 : /正则表达式/标志位 g :全局匹配 i : 不区分大小写,
2. 构造函数的方式: new RegExp(‘正则表达式’,‘标志位’);
四. 正则表达式对象的方法?
正则表达式对象.test(字符串) : 如果字符串中包含了正则表达式的内容,返回true,否则,返回false,
正则表达式对象.exec(字符串) : 如果字符串中包含了正则表达式的内容,返回数组,否则,返回null,
扩展: 字符串的方法,
字符串对象.match(正则表达式) : 如果字符串中包含了正则表达式的内容,返回数组,否则,返回null,
字符串对象.search(正则表达式) : 类似于indexOf(),查找正则匹配的内容在字符串中第一次出现的下标位置,如果没有找到,返回-1
字符串对象.replace()
exec与match的区别:
数组中第一个元素,返回的是整个正则表达式匹配到的字符串。
数组中第其它元素,是()这个组匹配到的字符串。
1. 无组无g时,都返回一个数组,数组元素只有一个匹配的内容。
var str = ‘how do you do’;
var re = /o/;
console.log(re.exec(str)); //[‘o’]
console.log(str.match(re)); //[‘o’]
2. 无组有g时,exec() 不受g的影响,只找第一个; match()受g的影响,返回所有匹配的内容
var str = ‘how do you do’;
var re = /o/g;
console.log(re.exec(str)); //[‘o’]
console.log(str.match(re)); //[‘o’,‘o’,‘o’,‘o’]
3. 有组无g时, exec和match相同,同时返回父级元素和子级元素。
var str = ‘how de you do’;
var re = /(de).+(do)/;
console.log(re.exec(str)); //[“de you do”,“de”,“do”]
console.log(str.match(re)); //[“de you do”,“de”,“do”]
4. 有组有g时,exec返回父级元素和子级元素;match只返回父级元素
var str = ‘how de you do’;
var re = /(de).+(do)/g;
console.log(re.exec(str)); //[‘de you do’,‘de’,‘do’]
console.log(str.match(re)); //[‘de you do’]
五. 正则表达式的元字符? 三三二三个一
三 : {} [] ()
{} : 表示{}前面的一个或一组字符串连续出现的次数
{m} : 表示{}前面的一个或一组字符串连续出现m次
var str = ‘dooo’;
var re = /^do{3}
/
;
c
o
n
s
o
l
e
.
l
o
g
(
r
e
.
t
e
s
t
(
s
t
r
)
)
;
m
,
:
表
示
前
面
的
一
个
或
一
组
字
符
串
连
续
出
现
至
少
m
次
。
m
无
限
v
a
r
s
t
r
=
′
d
o
o
o
o
o
o
o
′
;
v
a
r
r
e
=
/
d
o
3
,
/; console.log(re.test(str)); {m,} : 表示{}前面的一个或一组字符串连续出现至少m次。 m ~ 无限 var str = 'dooooooo'; var re = /^do{3,}
/;console.log(re.test(str));m,:表示前面的一个或一组字符串连续出现至少m次。m 无限varstr=′dooooooo′;varre=/do3,/;
console.log(re.test(str));
{m,n} : 表示{}前面的一个或一组字符串连续出现至少m次,最多n次 m~n
var str = ‘dooooo’;
var re = /^do{3,5}$/;
console.log(re.test(str));
[] : 表示范围
var str = ‘abcab’;
var re = /1{3,5}$/;
console.log(re.test(str));
var str = 'eee';
var re = /^[a-z]{3,5}$/;
console.log(re.test(str));
var str = 'Aee';
var re = /^[a-z]{3,5}$/i; //i : 不区分大小写
console.log(re.test(str));
var str = 'Aee';
var re = /^[a-zA-Z]{3,5}$/;
console.log(re.test(str));
var str = '110';
var re = /^[0-9]{3,5}$/;
console.log(re.test(str));
var str = '10019';
var re = /^[0-9]{6}$/;
console.log(re.test(str));
if(!re.test(str)){
alert('您输入的邮编错误!');
}
var str = 'abc123_';
var re = /^[0-9a-zA-Z_]{6,12}$/;
console.log(re.test(str));
if(!re.test(str)){
alert('您输入的邮编错误!');
}
var str = '3333333';
var re = /^[0-9a-zA-Z_]{6,12}$/;
console.log(re.test(str));
if(!re.test(str)){
alert('您输入的邮编错误!');
}
var str = '王小二';
var re = /^[\u4e00-\u9fa5]{3,6}$/;
console.log(re.test(str));
if(!re.test(str)){
alert('您输入的邮编错误!');
}
() : 表示组
var str = 'dododo';
var re = /^(do){3,6}$/;
console.log(re.test(str));
if(!re.test(str)){
alert('您输入的邮编错误!');
}
三、 * + ? : 限制符号前面的一个或一组字符串连续出现的次数
* : 表示前面的一个或一组字符串连续出现至少 0 次,最多 无限次 相当于{0,}
var str = ‘how’;
var re = /^(do)
/
;
c
o
n
s
o
l
e
.
l
o
g
(
r
e
.
t
e
s
t
(
s
t
r
)
)
;
+
:
表
示
+
前
面
的
一
个
或
一
组
字
符
串
连
续
出
现
至
少
1
次
,
最
多
无
限
次
相
当
于
1
,
v
a
r
s
t
r
=
′
d
o
d
o
d
o
d
o
d
o
′
;
v
a
r
r
e
=
/
(
d
o
)
+
/; console.log(re.test(str)); + : 表示+前面的一个或一组字符串连续出现至少 1 次,最多无限次 相当于{1,} var str = 'dododododo'; var re = /^(do)+
/;console.log(re.test(str));+:表示+前面的一个或一组字符串连续出现至少1次,最多无限次相当于1,varstr=′dododododo′;varre=/(do)+/;
console.log(re.test(str));
?:表示?前面的一个或一组字符串连续出现至少0次,最多1次 相当于{0,1}
var str = ‘d’;
var re = /^(do)?$/;
console.log(re.test(str));
二、 ^ $
^ : 1. 如果放在正则表达式的开头部分: 表示定头(断头),限制字符串的开头字符。
var str = ‘d’;
var re = /^d(do)?KaTeX parse error: Double superscript at position 93: … var re = /^[^̲0-9]+/;
console.log(re.test(str));
$ : 表示定尾(断尾),限制字符串的结束字符
var str = ‘how do you do’;
var re = /[0-9]+doKaTeX parse error: Expected 'EOF', got '\ ' at position 53: …个一、 . | \̲ ̲ . : 表示模糊匹配任意一…/;
console.log(re.test(str));
var str = 'howdo youdo.';
var re = /^(.o.)+$/;
console.log(re.test(str));
| : 表示或者
var str = '女';
var re = /^(男|女)$/;
console.log(re.test(str));
var str = '中国';
var re = /^((中国)|(俄罗斯)|(德国))$/;
console.log(re.test(str));
\ : 转义符
var str = '.rmvb';
var re = /^\.[a-z0-9]{2,4}$/i;
console.log(re.test(str));
\s : 空白符
var str = 'how are you';
var re = /^.+\s.+\s.+$/i;
console.log(re.test(str));
\S : 非空白符
\d : 表示数字 相当于[0-9]
var str = '100193';
var re = /^\d{6}$/;
console.log(re.test(str));
\D : 表示非数字 相当于[^0-9]
\w : 表示字母、数字、下划线 相当于[a-zA-Z0-9_]
\W : 表示非(字母、数字、下划线)相当于[^a-zA-Z0-9_]
\b : 表示单词边界
var str = 'howb do';
var re = /\bdo\b/;
console.log(re.test(str));
var str = 'how do you do';
var re = /do\b/;
console.log(re.test(str));
六. 扩展案例
June 6,2014 /2+ \d{1,2},\d{4}KaTeX parse error: Expected 'EOF', got '\w' at position 65: …许全部是字母。 /^[a-z]\̲w̲{2,9}/
/(^\s+)|(\s+$)/
’ a b ’
qq.com
123.com.cn
\w+@\w+.[a-z]{3}(.[a-z]{2})?
http://\w+.[a-z]{3}(.[a-z]{2})?
https
/^(http|https)?/\w+.[a-z]{3}(.[a-z]{2})?$/