• 正则表达式


    1.什么是正则表达式

    正则:是规定一个字符串中字符出现的规律的表达式

    2.什么时候使用呢?

    只要使用一个种规则,模糊匹配关键词时候使用

    3.怎么用正则呢?

    <1.最简单的正则就是直接写关键词原文

    <2、字符集:规定字符串中某一位字符,备选字符列表 只有一个字符,但是有多重选择字符

    语法:[备选字符列表]

    每个字符集只能匹配一位字符,且每个字符其中至少匹配一次

    例如:[微wv][信x]  匹配到的内容: 微信 wx vx 微x v信 w信

    如果备选字符列表是连续的,可用-省略中间字符

    例如:
    一位数字:[0123456789] ==>[0-9]

    一位小写字母:[a-z]

    一位大写字母:[A-Z]

    一位字母:[a-zA-Z]

    一位汉字:[u4e00-u9fa5]

    特殊:除了xx以外[^xx]^必须写在正则的开头

    4.预定义字符集:意思是对常用字符集的简写

    w   一位字母数字或_ [0-9a-zA-Z_]

       

    d  一位数字   [0-9]  digital(数位)

    s  一位空字符  一切看不见的字符:空格,Tab ,回车..

     

    .   一位任意字符

    5.一个预定义字符集仅匹配一位字符,仅用于规定字符的内容

    量词:专门规定一位字符集出现次数的规则,量词都是用于一个字符集只有默认修辞相邻的前一个字符集,量词需要用在字符后面

    <1、有明确数量的边界

    字符集{min,max} 规定字符集出现最少min次,最多max次

    字符集{min,} 最少出现min次

    字符集{n} 必须出现n次

    <2、没有明确数量的边界 

    字符集? 可有可无,最多出现一次

    字符集* 可有可无,多了不限

    字符集+ {1,} 至少出现一个,多了不限

    仅修辞相邻的前一个字符集

    选择和分组

    分组:将多个字符集组成一组 可以让一个量词修饰多个字符集

    ex: (字符集){  }

    选择:"或" 匹配任意一个规则即可

    ex: 规则1|规则2 (微|w(ei)?)(信|x(in)?)

    <3.匹配指定位置的字符

    字符串的开头 ^ ex: ^s+ 开头的空字符

    字符串结尾 $ ex: s+$ 结尾的空字符

    单词边界  ex:  no 

    匹配no这个单词,但是前和后可以用标点或者空格和其他字符隔开

    <4.手机号

    (+86|0086)? +86或0086

    s* 空字符,可有可无,多了不限制

    1

    [3457869] 3,4,5,6,7,8,9中挑一个

    d{9} 9位数字

    (+86|0086)?s*1[3456789]d{9}        正则中间不要加空格,容易被解析成规则 +前加上否则会被解析成量词

    邮箱

    数字/字母或_ 一次以上 w+

    @

    字母或数字 2位以上 [0-9a-zA-Z]{2,}

    (. 和 (字母或数字) 2-3位) 1-2次

    6.例句语法:

    <1.var str = 'good good study,day day up';

               // 01234567890123456789012

    var  i = str.indexOf('day',i+1);

     console .log(i);

    //var i = str.indexOf("关键词",fromi);  从指定位置开始找下一个

    <2.str = "no zuo no die no can no bibi ";

    //循环变量

    var i = -1;

    //反复:通过改变i的值,查找str中包含弄关键词的位置

    while((i = str.indexOf("no",i+1))!=-1){

    console.log('在位置'+i+"发现敏感词");

    }

    //var i = str.lastIndexOf("关键词",fromi) 用法和indexOf相同,但是从后往前查找

    console.log(str.lastIndexOf('no'));

    // 问题:只能找一个关键词

    // 解决:正则表达式

    //2.判断字符串中是否包含了符合规范的敏感词

    //var i = str.seach(/正则/)

    //在str中查找一个符合正则表达式要求的关键词的位置

    //返回值:找到的关键词的下标,如果找不到返回-1

    //发送消息是,只要包括了'微信'就不让发送

    7.查找匹配

    1.验证:检查字符串是否完全符合正则表达式的要求!

     var bool = reg.test(待检测的字符串)

     输入六位数的密码 只要是验证,reg必须前加^后加$ 从头到尾的完整的匹配

     var reg = /^d{6}$/;

    while(!reg.test(prompt('请输入密码:'))){

    alert('密码格式不符!请输入六位数的密码!');

    }

    document.write('<h1>验证通过</h1>');

    查找 关键词;第四种情况, 4.既找到所有关键词的内容也找到每个关键词的位置?

    var arr = reg.exec(待检测的字符串)

    返回值:本次找到的一个关键词及其位置

     arr[0]:关键词的内容

     如果正则中有分组

     arr[n]:自动保存第n个分组匹配的字内容

    arr["index"]:当前关键词的位置 简写 arr.index

     如果 没找到,返回null

     每一次查找后,都将reg.lastIndex属性(下一次开始位置) 修改为位置index+关键词长度,相当于当前关键词继续向后找

    8.正则创建

    RegExp对象中封装了,正则表达式,并且提供使用正则的API查找和验证

    利用正则查找关键词的四种情况 利用正则执行验证

    var reg = /正则/ig; 正则是固定不变

    1.创建固定不变的正则表达式 创建的是一个对象 直接量

    var str = "no can n/o say , you can you up";

    var reg = /n /o/g;      在双斜杠中写的是内容遵循的是正则的语法,因此想要使用/需要加上作为转义

    9.正则的贪婪及懒惰

    贪婪模式:正则表达式默认匹配最长的符合正则条件的子字符串

     .* .+

     ;懒惰模式:仅匹配最短的符合条件的子字符串

     贪婪改懒惰 2种方法

     1. .* .+ =====> .*? .+?

     2. [^xxx]*

    例如:

    var  html = '<link rel="stylesheet" href="RegExp.html"><body><ul><li><a class="active" href="http://www.bailiabn.com">百里半</a></li><li><a href="http://www.baidu.com" target="_blank">百度</a></li></ul></body>';

    正则的分组是为精确的获取我想要匹配的内容

    reg = /<as+[^>]*?href="([^"]*?)"/gi;

    如果匹配出来的内容只关心字内容,不关心完整的内容

    while(reg.exec(html) != null){

    console.log(RegExp.$1);

    RegExp.$n  可获取本次找到的第n个分组的子内容

    }

  • 相关阅读:
    SCRUM 12.21
    SCRUM 12.20
    SCRUM 12.19
    SCRUM 12.18
    M2阶段团队个人贡献分
    Bug列表
    M2事后分析
    hots团队项目终审报告
    M2阶段测试报告
    Beta版本发布报告
  • 原文地址:https://www.cnblogs.com/hyh888/p/11301405.html
Copyright © 2020-2023  润新知