1.2正则表达式
正则表达式由有普通字符和一些元字符(具有特定含义的字符)组成。
脚下留心:正则表达式是表达式,不是一门语言,既然是表达式既可以运行在客户端也可以运行在服务器端,而且跨语言跨平台。
正则表达式区分大小写
1.3中括号的应用
方括号中的字符属于普通字符
1、[0-9a-zA-Z_]:字母、数字、下划线
2、[c-f]:c到f的任意字符
<script type="text/javascript">
var str='锄禾日当午';
var patten=/禾/; //则表达式必须放在//之间
var info=str.match(patten);
console.log(info); // ["禾", index: 1, input: "锄禾日当午"]
if(info!=null){
console.log(info[0]);
}
</script>
match:用来匹配字符串,没有找到匹配返回null,找到匹配返回一个数组
注意:正则表达式必须放在/ 正则表达式 /之间
<script type="text/javascript">
var str='Hello';
var array=str.match(/[d-n]/);
console.log(array); // ["e", index: 1, input: "Hello"]
console.log(array[0]); //e
</script>
1.4量词
量词用来指定字符出现的次数
字符 含义
- 字符出现的次数>=1
=0
? =0或=1
{n} 字符出现n次
{n,m} 字符出现的次数>=n并且<=m
{n,} 字符出现的次数>=n
<script type="text/javascript">
var stu=['tm','tom','toom','tam'];
for(var s in stu){
//console.log(stu[s].match(/to+m/)); //tom toom
//console.log(stu[s].match(/to*m/)); //tm tom toom
//console.log(stu[s].match(/to?m/)); //tm tom
//console.log(stu[s].match(/to{2,3}m/)); //toom
console.log(stu[s].match(/to{1,}m/)); //tom,toom
}
</script>
1.5元字符
字符 含义
() 作用一:将多个字符组成一组
作用二:模式单元(提取匹配数据)
[] 定义字符集合
{} 定义字符重复的次数
- 字符出现的次数>=1
=0
? =0或=1
^ 表示匹配开始
$ 表示结束
. 代表任意字符
\ 转义字符
| 或者
例题:小括号,将小括号中字符串作为一个整体
<script type="text/javascript">
var str='aabbb';
var info=str.match(/(ab)+/);
console.log(info[0]);
</script>
例题:^和$
<script type="text/javascript">
var str='abcde';
//var info=str.match(/^bc/); //必须是b开头
//var info=str.match(/de$/); //必须的e结尾
var info=str.match(/^a[a-z]+e$/); //以a开头,e结尾
console.log(info);
</script>
例题:.代表任意字符,\表示转义
例题:或
<script type="text/javascript">
var stu=['tam','tom','tan','toe','taam','taom','toom'];
for(var s in stu){
var info=stu[s].match(/^t[a|o]+m$/);
console.log(info); //tam tom taam taom toom
}
</script>
关于元字符的练习
<script type="text/javascript">
//--------------练习一---------
var array=['apple','banana','orange','tom'];
for(var a in array){
if(array[a].match(/apple|orange/)){
console.log(array[a]); //apple、orange
}
}
//-------------练习二---------
var email=['aa','aa@aa.com','bb@bb.com.cn'];
for(var e in email){
if(email[e].match(/.+@.+\..+/)){
console.log(email[e]); //aa@aa.com bb@bb.com.cn
}
}
//------------练习三---------
var str=['ab','abab','ababab','ac'];
for(var s in str){
if(str[s].match(/(ab)+/)){
console.log(str[s]); //ab abab ababab
}
}
//----------练习四---------------
var emp=['tom','otoom','tooooomo','otooomo'];
for(var e in emp){
if(emp[e].match(/to*m/)){
console.log(emp[e]); //全部满足
}
}
for(var e in emp){
if(emp[e].match(/^to*m$/)){
console.log(emp[e]); //tom
}
}
</script>
1.6模式修正符
i 忽略区分大小写
g: 全局匹配
1.7模式单元
模式单元用于将匹配的数据提取出来
用于做爬虫技术(数据采集)
<?php
//---采集誓婚网的数据
$str=file_get_contents('http://www.shihun1314.com');
$pattern='/<div class="home_index_part1_1 body">(.+)<\/div>/';
preg_match($pattern, $str,$info);
echo ($info[1]);
?>
1.7.1模式单元的重复匹配
模式单元的重复匹配是从1开始, \1表示第一个模式单元 \2表示第二个模式单元
<script type="text/javascript">
var str='2015-12-12 12:09:12';
//var reg=/[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/;
//var reg=/[0-9]{4}-([0-9]{2})-\1 \1:\1:\1/; //\1 表示和第一个模式单元一样
//var reg=/[0-9]{4}(-[0-9]{2})\1 [0-9]{2}(:[0-9]{2})\2/;
var reg=/[0-9]{4}(-[0-9]{2}){2} [0-9]{2}(:[0-9]{2}){2}/;
console.log(str.match(reg));
</script>
1.7.2模式单元括号的索引
如果没有括号的嵌套,从左往右计数
如果有括号嵌套,从外向里计数。
1.8字符簇
字符簇 含义
\d 数字
\D 非数字
\w 字母、数字、下划线
\W 非字母、数字、下划线
\s 空白字符
\S 非空白字符
\b 单词的边界
\B 非单词边界
例题
<script type="text/javascript">
var str='我的电话是123456789';
console.log(str.match(/(\d+)/)); //取出字符串中的数字 123456789
console.log(str.match(/\D+/)); //取出字符串中非数字
str='锄 禾 日 当 午';
console.log(str);
console.log(str.replace(/\s/g,'')); //替换所有的空白字符
console.log(str.match(/\S/g)); //["锄", "禾", "日", "当", "午"]
str='我的学号是Stu_001';
console.log(str.match(/\w+/)); //Stu_001
console.log(str.match(/\W+/)); //我的学号是
str='this is a girl';
console.log(str.replace(/\bis\b/,'isn\'t')); //this isn't a girl
console.log(str.replace(/\Bis\b/,'at')); // that is a girl
str='sunjing010@sina.com.cn.cn';
if(/^\w+@\w+\.\w+(\.\w+)?$/.test(str))
alert('成功');
else
alert('失败');
</script>
1.9脱字符
脱字符表示不在某个范围里面
1.10正向预查
在用正则表达式匹配数据的时候,取出的数据可能还不是我们想要的数据,我们需要通过辅助条件再次进行筛选。
正向预查就是辅助条件在查询表达式的右边。
1.10.1正向匹配
语法:patten(?=模式)
patten:是正则表达式的匹配内容
小括号中是辅助条件,辅助条件在正则表达式右边
<script type="text/javascript">
var stu=['stu001','teacher001','emp002','work0030'];
for(var s in stu){
var array=stu[s].match(/[a-z]+(?=\d{3}$)/);
if(array!=null)
console.log(array[0]); //stu teacher emp
}
</script>
1.10.2正向不匹配
语法:patten(?!模式)
<script type="text/javascript">
var stu=['stu_001','teacher_002','emp_b','work_a'];
for(var s in stu){
var info=stu[s].match(/([a-z]+)_(?!\d+)/);
if(info){
console.log(info[1]); // emp work
}
}
</script>
1.11反向预查
辅助条件在正则表达式左边
脚下留心:js不支持,PHP支持
1.11.1反向匹配
语法:(?<=模式)patten
文章内容 都是 个人收集整理,修改过后的。