最近 写一个项目 用到了 正则表达式 整理了一下

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>

例题:.代表任意字符,\表示转义

image.png

例题:或

<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: 全局匹配

image.png

1.7模式单元
模式单元用于将匹配的数据提取出来

image.png

用于做爬虫技术(数据采集)

<?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模式单元括号的索引
如果没有括号的嵌套,从左往右计数
如果有括号嵌套,从外向里计数。

image.png

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脱字符
脱字符表示不在某个范围里面

image.png

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

image.png

文章内容 都是 个人收集整理,修改过后的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容