冻冻玖  

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+$ 开头或结尾的空字符

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

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

        一个单词no  \bno\b

posted on 2018-05-07 14:39  醉里挑灯看码  阅读(1572)  评论(0编辑  收藏  举报