zoukankan      html  css  js  c++  java
  • 2019.7.31正则

    正则表达式Regular(规则) Expression(表达式)
    规定一个字符串中字符出现的规律的表达式
    xxx@qq.com/cn 1
    when 只要使用一个种规则,模糊匹配关键词时
    how
    1.最简单的正则就是关键词原文
    ex: 我 我是 我shi
    内容: 我 我是 我shi

    2、字符集:规定字符串中某一位字符,备选字符列表 只有一个字符,但是有多重选择字符
    语法:[备选字符列表]
    每个字符集只能匹配一位字符,且每个字符集中至少匹配一次
    ex:[微wv][信x]
    匹配到的内容: 微信 wx vx 微x v信 w信
    ex:[Qq][Qq]
    匹配到的内容:Qq qq QQ qQ
    简写:
    1.如果备选字符列表是连续的,可用-省略中间字符
    一位数字:[0123456789] ==>[0-9]
    ex:[0-9] [2-8] [1-1]
    内容:0123 567 11111
    一位小写字母:[a-z]
    一位大写字母:[A-Z]
    一位字母:[a-zA-Z]
    一位汉字:[u4e00-u9fa5]
    特殊:除了xx以外[^xx]^必须写在正则的开头
    预定义字符集:对常用字符集的简写
    w 一位字母数字或_ [0-9a-zA-Z_]
    d 一位数字 [0-9] digital(数位)
    s 一位空字符 一切看不见的字符:空格,Tab ,回车..
    ex:(三个空格) aaa
    内容(三个空格) aaa
    . 一位任意字符
    一个预定义字符集仅匹配一位字符,仅用于规定字符的内容
    量词:专门规定一位字符集出现次数的规则,量词都是用于一个字符集只有默认修辞相邻的前一个字符集,量词需要用在字符后面
    1、有明确数量的边界
    字符集{min,max} 规定字符集出现最少min次,最多max次
    ex:
    字符集{min,} 最少出现min次
    字符集{n} 必须出现n次
    2、没有明确数量的边界
    字符集? 可有可无,最多出现一次
    字符集* 可有可无,多了不限
    字符集+ {1,} 至少出现一个,多了不限
    仅修辞相邻的前一个字符集
    选择和分组
    分组:将多个字符集组成一组 可以让一个量词修饰多个字符集
    ex: (字符集){}
    选择:"或" 匹配任意一个规则即可
    ex: 规则1|规则2 (微|w(ei)?)(信|x(in)?)
    匹配指定位置
    字符串的开头 ^ ex: ^s+ 开头的空字符
    字符串结尾 $ ex: s+$ 结尾的空字符
    单词边界  ex: no 匹配no这个单词,但是前和后可以用标点或者空格和其他字符隔开

    手机号
    (+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次

    // 检索关键词 查找出字符串中包含的敏感词的位置或者内容 4种
    // 1、查找一个固定的关键词出现的位置 只找第一次出现的位置
    // var i = str.indexOf("关键词"); 查找的是第一次出现的位置,如果没找到返回-1 省略第二参数,默认从0开始查找
    // 关键词严格区分大小写
    var str = "good good study , day day up";
    // 0123456789012345678901234567
    var i = str.indexOf("day");
    console.log(i);
    //var i = str.indexOf("关键词",fromi); 从指定位置开始找下一个
    i = str.indexOf("day",i+1);
    console.log(i);

    i = str.indexOf("very");
    console.log(i);

    str = "no zuo no die No can no bibi";
    //循环变量
    var i = -1;
    // 反复:通过给变i的值,查找str中包含no关键词的位置
    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.search(/正则/)
    // 在str中查找第一个符合正则表达式要求的关键词的位置
    // 返回值:找到的关键词的下标,如果找不到返回-1
    // 发送消息是,只要包括了 "微信"就不让发送

    <ul id="ulname">
    <li>one</li>
    <li>two</li>
    <li>three</li>
    <li>four</li>
    <li>five</li>
    </ul>

    <script type="text/javascript">
    // 检索关键词 查找出字符串中包含的敏感词的位置或者内容 4种
    // 1、查找一个固定的关键词出现的位置 只找第一次出现的位置
    // var i = str.indexOf("关键词"); 查找的是第一次出现的位置,如果没找到返回-1 省略第二参数,默认从0开始查找
    // 关键词严格区分大小写
    var str = "good good study , day day up";
    // 0123456789012345678901234567
    var i = str.indexOf("day");
    console.log(i);//18
    //var i = str.indexOf("关键词",fromi); 从指定位置开始找下一个
    i = str.indexOf("day",i+1);
    console.log(i);//22

    i = str.indexOf("very");
    console.log(i);//-1没找到

    str = "no zuo no die No can no bibi";
    //循环变量
    var i = -1;
    // 反复:通过改变i的值,查找str中包含no关键词的位置
    while((i=str.indexOf("no",i+1))!=-1){
    console.log('在位置'+i+"发现敏感词");
    }
    // var i = str.lastIndexOf("关键词",fromi) 用法和indexOf相同,但是从后往前查找
    console.log(str.lastIndexOf("no"));
    //替换:讲字符串找那个的所有敏感词替换成新的内容,不修改原字符串的权限,要
    //用变量接收
    var str = 'no zuo no die no can No bb';
    //查找:search。在str中查找第一个符合表达式要求的关键字,找到了返回下标,
    //没找到返回-1,
    console.log(str.search(/no/i));
    //match:找到一个内容,保存在一个数组里面。
    console.log(str.match(/no/ig));
    //replace,替换,ig表示不区分大小写和全局。后面的为所替换的字
    str = str.replace(/no/ig,'bu');
    console.log(str);

    //根据不同类型的敏感词,动态替换不同新值。
    //替换 我去 卧槽 我去去
    var msg = '什么?女神约我去吃饭?卧槽!真的?那我去去就来。'
    msg = msg.replace(/[我卧][槽去][去]?/ig,
    //kw为本次找到的关键字,return 根据关键字替换出来的新字
    function(kw){
    return kw.length == 2?'**':'***';
    }
    )
    console.log(msg)

    //删除字符串开头和结尾的空格
    var asd = ' q w e r ';
    asd = asd.replace(/^s+|s+$/ig,'')
    console.log(asd);

    //切割:spilt 切割后多个字符串组成数组
    var pid = '421181199712090432';
    var chars = pid.split('');
    console.log(chars);
    var mail = '313558147@qq.com';
    var arr = mail.split(/@/);
    //切割后分为两个数组
    var arr1 = arr[0];
    var arr2 = arr[1];
    console.log(arr,arr1,arr2);

    function ulname(){
    /*//1.后的ulname元素中html内容 innerHTML,保存到html中
    var html = document.getElementById('ulname').innerHTML;
    console.log(html);
    //2.删除html开头的空字符<li>和结尾的</li>空字符
    html = html.replace(/^s*<li>|</li>s*$/g,'');
    console.log(html);
    //3.按照</li>空字符<li>切割html 保存到一个names数组中
    var names = html.split(/</li>s*<li>/g);
    console.log(names);
    //4.对数组名字进行排序
    names.sort();
    console.log(names);
    //5.按照拆分的格式,进行还原
    html = '<li>' + names.join('</li><li>') + '</li>';
    console.log(html);
    //6.将html写入到ulname元素中去
    document.getElementById('ulname').innerHTML = html;*/
    document.getElementById('ulname').innerHTML = '<li>' + document.getElementById('ulname').innerHTML.replace(/^s*<li>|</li>s*$/g,'').split(/</li>s*<li>/g).sort().join('</li><li>') + '</li>';
    }
    ulname()

    //将这六行携程一行代码。

  • 相关阅读:
    C语言源代码——计算任何一天是星期几
    计算任意一天是星期几
    wpf利用线程制作初始界面和关闭窗体特效
    实用的 集合工具类 和 String工具类
    从“关于Java堆与栈的思考”一帖看错误信息的传播
    web.xml 配置中classpath: 与classpath*:的区别
    git的安装-环境变量配置
    解决Oracle安装时报错“SID已在使用”办法
    ORACLE日期时间函数
    Java 开发环境配置
  • 原文地址:https://www.cnblogs.com/awei313558147/p/11302403.html
Copyright © 2011-2022 走看看