• 正则应用


    首先统计每一个字符出现的次数,并且统计出maxNum的输出
    var str = "hsahsjafjshfjshafjksh",obj = {};
    str.replace(/w/g,function()){
    var key = argument[0];
    if(obj[key]>=1){
    obj[key]++;
    return;
    }
    obj[key]=1;
    };console.log(obj);->实现统计每一个字符出现的次数;
    var  maxNum = 0;
    for (var key in obj){
    if(obj.hasOwnproperty(key)){
    obj[key]>maxNum?maxNum = obj[key]:null;
       }
    }
    var res = "最多出现"+maxNum+"次 出现的字符:";
    for(key in obj){
    if(obj.hasOwnproperty(key)){
     obj[key] ===maxNum ? res+= key+“ ”:null;
      }
    obj = null;
    console.log(res);
    }
    单词首字母大写
    str = "my name is zhou xiao tian,my age is twenty five years old~~";
    str = str.replace(/\w+/g, function () {
        var res = arguments[0];
        return res.substr(0, 1).toUpperCase() + res.substr(1);
    });
    console.log(str);
    格式化时间
    //->"2015年05月03日 12时09分13秒"

    // str = "2015-05-03 12:09:13";
    // str = str.replace(/^(\d+)-(\d+)-(\d+) +(\d+):(\d+):(\d+)$/, "$1年$2月$3日 $4时$5分$6秒");
    // console.log(str);
    String.prototype.myFormatTime = function myFormatTime() {
        var reg = /^(\d{4})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:\s+)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})$/g, ary = [];
        this.replace(reg, function () {
            ary = Array.prototype.slice.call(arguments, 1, 7);
        });
        var format = arguments[0] || "{0}年{1}月{2}日 {3}:{4}:{5}";
        return format.replace(/{(\d+)}/g, function () {
            var val = ary[arguments[1]];
            return val.length === 1 ? "0" + val : val;
        });
    };
    str = "2015-5-3 12:9:13";
    console.log(str.myFormatTime());
    console.log(str.myFormatTime("{0}年{1}月{2}日"));
    console.log(str.myFormatTime("{1}-{2} {3}:{4}"));
    数字转大写
    //->"贰零壹伍"
    str = "2015";
    ary = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
    str = str.replace(/\d+?/g, function () {
        return ary[arguments[0]];
    });
    console.log(str);
    1、元字符
    [拥有特殊含义的元字符]
    \d -> 匹配一个0-9的数字,相当于[0-9],和它相反的是\D ->匹配一个除了0-9的任意字符
    \w -> 匹配一个0-9、a-z、A-Z、_的数字或字符,相当于[0-9a-zA-Z_]
    \s -> 匹配一个空白字符(空格、制表符...)
    \b -> 匹配一个单词的边界
    \t -> 匹配一个制表符
    \n -> 匹配一个换行
    . -> 匹配一个除了\n以外的任意字符
    ^ -> 以某一个元字符开头
    $ -> 以某一个元字符结尾
    \ -> 转移字符
    x|y -> x或者y的一个
    [xyz] -> x、y、z中的任意一个
    [^xyz] -> 除了xyz中的任意一个字符
    [a-z] -> 匹配a-z中的任意一个字符
    [^a-z] -> 匹配除了a-z中的任意一个字符
    () -> 正则中的分组

    注意:
    1)关于[]
    a、[+] ->中括号中出现的所有字符都代表的是本身的意思
    b、[12-65] ->这个不是12-65而是1/2-6/5三者中的一个

    2)关于()
    a、分组的作用是改变默认的优先级,例如:/^18|19$/,181、189、119、819、1819...都符合,而不是我们认为的18或19,但是改成/^(18|19)$/就是单纯的18或19了
    b、可以在捕获大正则匹配的内容同时,把分组匹配的内容也进行捕获->分组捕获
    c、分组引用,例如:/^(\d)(\w)\2\1$/,这里的\2是和第二个分组出现一模样的内容,\1是和第一个分组出现一模一样的内容,例如:"0aa0"就符合了

    [代表数量的量词元字符]
    * -> 0到多个
    + -> 1到多个
    ? -> 0到1个
    {n} -> 出现n次
    {n,} -> 出现n到多次
    {n,m} -> 出现n到m次

    注意:
    1)关于?的几种情况
    a、放在非量词元字符后面,代表出现0-1次
    b、放在量词元字符后面,代表取消捕获时候的贪婪性,例如:reg=/\d+/; reg.exec("2015") -> "2015" 但是如果正则这样写 reg=/\d+?/; reg.exec("2015") -> "2"
    c、在分组开头加?:,代表当前的分组只是匹配不进行捕获,例如:/^(?:\d+)$/
    d、在分组开头加?=,正向预查,例如:/^zhufeng(?=1|2)$/ 只有"zhufeng1"和"zhufeng2"才符合
    e、在分组开头加?!,负向预查,例如:/^zhufeng(?!1|2)$/ 除了"zhufeng1"和"zhufeng2"不符合,其他的只要是"zhufeng(任何的东西)"都符合

    [代表本身意思的元字符]
    除了以上的,在字面量方式中,我们出现的其他任意字符代表的都是自己本身的意思
    var num=12;
    var reg=/^\w"+num+"$/; ->这里"+num+"不是把变量的值拼接,而这里的不管是"还是+都是元字符
    ->对于需要拼接字符串和变量的方式我们只能使用实例方式创建正则

    2、修饰符
    i -> ignoreCase 忽略字母的大小写
    g -> global 全局匹配 (加上g可以解决正则捕获时候的懒惰性)
    m -> multiline 多行匹配

    3、项目中常用的正则
    1)有效数字的
    var reg=/^[+-]?(\d|([1-9]\d+))(\.\d+)?$/;

    2)邮箱的
    var reg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;

    3)电话的
    var reg = /^1\d{10}$/;

    4)年龄在18-65之间的
    var reg = /^((18|19)|([2-5]\d)|(6[0-5]))$/;

    5)中文姓名
    var reg = /^[\u4e00-\u9fa5]{2,4}$/;

    6)身份证
    var reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(?:\d|X)$/;
    //-> 130828(省市县) 1990(年) 12(月) 04(日) 06 1(奇数是男偶数是女) 7(数字或者X)

    4、正则的匹配
    reg.test([string]) ->true就是匹配成功 false->匹配不成功

    5、正则的捕获
    1)reg.exec([string])
    -> 首先去匹配,匹配成功在捕获,返回的是一个数组; 如果匹配不成功返回的是null;
    -> 正则的捕获即懒惰又贪婪
    -> 解决懒惰性 在正则的末尾增加全局修饰符g
    -> 解决贪婪性 在量词后面加?




  • 相关阅读:
    梦断代码(一)——死定了
    十天冲刺2——(六)
    十天冲刺2——(五)
    十天冲刺2——(四)
    十天冲刺2——(3)
    十天冲刺2——(二)
    关键字简介
    基本类型
    使用命令编译运行Java程序
    在Windows平台上搭建Java环境
  • 原文地址:https://www.cnblogs.com/han6054/p/5352457.html
Copyright © 2020-2023  润新知