zoukankan      html  css  js  c++  java
  • JS高级-String-正则表达式:

    1. String: 由多个字符组成的字符只读数组

     vs 数组: 相同: 1. 下标, 2. .length, 3. 遍历, 4. .slice

             不同: 类型不同!  API不通用

     API: 所有字符串API,都无权修改原字符串,只能返回新字符串

      大小写转换: 将字符串中的字母统一转为大写/小写

       何时: 不区分大小写时

       如何: str.toUpperCase() 转大写

            str.toLowerCase() 转小写

       说明: sql语句默认不区分大小写

           如果希望密码区分大小写: binary upwd=$upwd

      获取指定位置的字符:

       str[i]  str.charAt(i)

       获取指定位置字符的unicode号

        var unicode=str.charCodeAt(i)

       将unicode号变回字:

        var char=String.fromCharCode(unicode)

      选取子字符串:

       str.slice(starti,endi+1) 含头不含尾

         .slice(starti,-n) 到倒数第n个之前

           => .slice(starti, str.length-n)

         .slice(starti) 选取到结尾

         .slice()  选取全部

         .slice(starti,starti+n) 选择n个

       str.substring(starti, endi+1) 用法同slice

         问题: 不支持负数参数

       str.substr(starti,n) 选择n个

      查找关键词: 4种:

       1. 查找一种固定的关键词出现的位置:

        var i=str.indexOf("关键词",fromi);

         在str中,从fromi位置开始,找下一个"关键词"出现的位置

         返回值: 第一个关键词的位置

           如果找不到,返回-1

        var i=str.lastIndexOf("关键词");

         查找str中"关键词"最后一次出现的位置

       问题: 关键词可能发生变化

       解决: 用正则查找关键词:

       2. 判断是否包含关键词:

        var i=str.search(/正则表达式/)

         查找str中第一个符合正则表达式规则的关键词的位置

         返回值: 关键词的位置

           如果没找到,返回-1

        问题: 所有正则,默认区分大小写的

        解决: 在第二个/后加i,  ignore

        问题: 无法获得关键词的内容

       3. 获得关键词的内容:

        1. 只获得第一个关键词的内容:

          var arr=str.match(/正则表达式/i);

           查找str中第一个符合正则表达式要求的关键词的位置和内容

           返回值: [ 0: 关键词,  index: 位置]

             如果没找到返回null

        2. 获得所有关键词的内容:

          var arr=str.match(/正则表达式/ig);

          其中g: global

          返回所有关键词组成的数组

        问题: 只能获得内容,无法获得每个关键词的位置:

       4. 即查找每个关键词的内容,又查找每个关键词的位置:

       

      替换: 2种:

       1. 简单替换:将所有敏感词,替换为统一的值

         str=str.replace(/正则表达式/ig, "替换值");

       2. 高级替换:根据每个敏感词的不同,动态选择不同的替换值

         str=str.replace(/正则表达式/ig, function(kw){

           //kw: 可自动获得本次找到的一个关键词

           return 根据kw的不同,动态选择不同返回值

         });

        原理: 回调函数function()会自动在每个找到的关键词上调用一次。调用时,参数kw会自动接住当前关键词。return返回的新值,会被替换到关键词所在位置。

       衍生操作: 删除: 替换为空字符串

        str=str.replace(/正则/ig,"")

      切割:

    2. 正则表达式:

     什么是: 规定一个字符串中字符出现规律的规则

     何时: 2种:

      1. 用一套规则,模糊匹配多种敏感词

      2. 用规则验证字符串是否符合格式要求

     如何:

      1. 最简单的规则: 就是关键词本身

      2. 字符集:

       什么是: 一位字符上所有备选字符的列表

       何时: 如果一位字符上,有多种备选字时

       如何: [备选字符列表]

         强调: 一个字符集,只能匹配一位字符

         简写: 如果字符集中部分字符是连续的,可用-省略中间字符:  比如:

            1位数字: [0-9]

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

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

            1位字母: [A-Za-z]

            1位字母或数字: [0-9A-Za-z]

            1位汉字: [u4e00-u9fa5]

         除了: [^47]

      3. 预定义字符集:

       d 一位数字: [0-9]

       w 一位字母,数字或下划线: [0-9A-Za-z_]

       s  一位空字符: 空格, Tab, ...

       .   通配符

      问题: 无法灵活规定字符集出现的次数

      4. 量词:

       什么是: 规定一位字符出现次数的规则

       何时: 只要灵活定义一位字符出现的次数时

       如何: 量词紧跟在一个字符集之后,默认修饰相邻的前一个字符集的个数

       2大类:

        1. 有明确数量边界的

          {n,m} 至少n个,最多m个

          {n,}  至少n个,多了不限

          {n}   必须n个

        2. 没有明确数量边界

          * 可有可无,多了不限

          ? 可有可无,最多一个

          + 至少一个,多了不限

      5. 选择和分组:

       1. 选择: 或   |

         什么是: 在多组逻辑之间,任选其一匹配即可

         何时: 只要在在多组逻辑之间,任选其一匹配

       2. 分组: ( )

         什么是: 将多个逻辑包裹为一组

         问题: 默认,一个量词只能修饰相邻的一个字符集

         何时: 如果希望一个量词可以同时修饰多个字符集时

      身份证号:

        15位数字  2位数字 一位数字或X

                     后三位整体可有可无,最多1次

            d{15}(d{2}[0-9X])?

      手机号:

       +86 或 0086  可有可无,最多1次

       空字符       可有可无,多了不限

       1

       3~8

       9位数字

       (+86|0086)?s*1[3-8]d{9}

                   ?/+

      6. 指定匹配位置:

       ^ 字符串开头

       $ 字符串结尾

       何时: 只要匹配开头的或结尾的内容时

       比如: ^s+ 开头的空字符

            s+$ 结尾的空字符

            ^s+|s+$ 开头或结尾的空字符

       单词边界: 空格,标点,开头,结尾,。。。

       比如: 每个单词首字符: [a-z]

            一个单词no  no

  • 相关阅读:
    配置iis支持.json格式的文件
    This function has none of Deterministic,no sql,or reads sql data in its declaration and binary logging is enabled(you *might* want to use the less safe log_bin_trust_function_creators variable
    IIS Asp.Net 访问 Com组件 报拒绝访问
    记一次 mysql 启动没反应
    linux 下安装 redis
    Jexus 安装asp.net mvc EF 项目引发的错误总
    在CentOS中安装arial字体
    Navigator 对象
    location 对象属性
    history对象
  • 原文地址:https://www.cnblogs.com/QiliPING9/p/9002593.html
Copyright © 2011-2022 走看看