• javascript的乐趣——0220


    1、对于generator函数,还不是很理解,之后再续

    2、javascript的乐趣_不要问为什么

    • 不要使用new Number()new Boolean()new String()创建包装对象;

    • parseInt()parseFloat()来转换任意类型到number

    • String()来转换任意类型到string,或者直接调用某个对象的toString()方法;

    • 通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...}

    • typeof操作符可以判断出numberbooleanstringfunctionundefined

    • 判断Array要使用Array.isArray(arr)

    • 判断null请使用myVar === null

    • 判断某个全局变量是否存在用typeof window.myVar === 'undefined'

    • 函数内部判断某个变量是否存在用typeof myVar === 'undefined'

    1 123.toString(); // SyntaxError
    123..toString(); // '123', 注意是两个点!
    (123).toString(); // '123'

    2、对于date对象,一个坑爹的地方是JavaScript的月份范围用整数表示是0~11,0表示一月,1表示二月……,所以要表示6月,我们传入的是5

    1 var today = new Date();
    2 if (today.getMonth() === 2 && today.getDate() === 14) {
    3     alert('亲爱的,我预定了晚餐,晚上6点在餐厅见!');
    4 }

    以上代码,真是注孤生的节奏啊......因为这匹配的是3月14号(坑无处不在)。

    3、RegExp(正则表达式)

    • '00d'可以匹配'007',但无法匹配'00A'

    • 'ddd'可以匹配'010'

    • 'ww'可以匹配'js'

    .可以匹配任意字符,所以:

    • 'js.'可以匹配'jsp''jss''js!'

    要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:

    进阶:

    • [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;

    • [0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100''0_Z''js2015'等等;

    • [a-zA-Z\_$][0-9a-zA-Z\_$]*可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名;

    • [a-zA-Z\_$][0-9a-zA-Z\_$]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。

    A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配'JavaScript''Javascript''javaScript'或者'javascript'

    ^表示行的开头,^d表示必须以数字开头。

    $表示行的结束,d$表示必须以数字结束。

    你可能注意到了,js也可以匹配'jsp',但是加上^js$就变成了整行匹配,就只能匹配'js'了。

    1 var re1 = /ABC-001/;
    2 var re2 = new RegExp('ABC\-001');
    3 
    4 re1; // /ABC-001/
    5 re2; // /ABC-001/

    RegExp对象的test()方法用于测试给定的字符串是否符合条件

    1 var re = /^d{3}-d{3,8}$/;
    2 re.test('010-12345'); // true
    3 re.test('010-1234x'); // false
    4 re.test('010 12345'); // false

    切分字符串:

    1 'a,b;; c  d'.split(/[s\,;]+/); // ['a', 'b', 'c', 'd']

    分组、贪婪匹配、全局匹配与搜索

    a.^(d{3})-(d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码

      exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。

      exec()方法在匹配失败时返回null

    1 var re = /^(d{3})-(d{3,8})$/;
    2 re.exec('010-12345'); // ['010-12345', '010', '12345']
    3 re.exec('010 12345'); // null

    b.正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符

    1 var re = /^(d+)(0*)$/;
    2 re.exec('102300'); // ['102300', '102300', '']

    d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让d+采用非贪婪匹配

    1 var re = /^(d+?)(0*)$/;
    2 re.exec('102300'); // ['102300', '1023', '00']

    c.JavaScript的正则表达式还有几个特殊的标志,最常用的是g,表示全局匹配,全局匹配可以多次执行exec()方法来搜索一个匹配的字符串。当我们指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引

     1 var s = 'JavaScript, VBScript, JScript and ECMAScript';
     2 var re=/[a-zA-Z]+Script/g;
     3 
     4 // 使用全局匹配:
     5 re.exec(s); // ['JavaScript']
     6 re.lastIndex; // 10
     7 
     8 re.exec(s); // ['VBScript']
     9 re.lastIndex; // 20
    10 
    11 re.exec(s); // ['JScript']
    12 re.lastIndex; // 29
    13 
    14 re.exec(s); // ['ECMAScript']
    15 re.lastIndex; // 44
    16 
    17 re.exec(s); // null,直到结束仍没有匹配到

    正则表达式还可以指定i标志,表示忽略大小写,m标志,表示执行多行匹配

    例:匹配email地址:

     1 var re = /^[da-zA-Z]+([._-]w+)*@([da-zA-Z]+.)+[a-zA-Z]{2,6}$/;
     2 
     3 var re = /^<(.+?)>s*([da-zA-Z]+[._-]?w+@[da-zA-Z]+.[a-zA-Z]{2,6})$/; //分组得到email地址的部分内容
     4 
     5 //测试部分:
     6 // 测试:
     7 var r = re.exec('<Tom Paris> tom@voyager.org');
     8 if (r === null || r.toString() !== ['<Tom Paris> tom@voyager.org', 'Tom Paris', 'tom@voyager.org'].toString()) {
     9     alert('测试失败!');
    10 }
    11 else {
    12     alert('测试成功!');
    13 }
  • 相关阅读:
    通过 AWS CLI 操作 AWS S3
    AWS S3文件存储服务器搭建(新)
    Vertx 接入MongoDB (九)
    Vertx 接入Redis (八)
    Vertx Mysql数据库优化 (七)
    Vertx 接入Mysql数据库 (六)
    Vertx 实现webapi实战项目(五)
    Vertx 实现webapi实战项目(四)
    Vertx 实现webapi实战项目(三)
    正则表达式:元字符(基本可用来匹配的字符)
  • 原文地址:https://www.cnblogs.com/moongy/p/6422072.html
Copyright © 2020-2023  润新知