【前端JS交互篇】数组对象、字符串对象、正则表达式、Date日期对象

36 篇文章 0 订阅
19 篇文章 1 订阅

一、数组对象

数组对象是JS中的一个内置对象,其内置了很多方法和属性供我们使用。

想要理解数组对象,先要理解什么是数组?

前面讲过变量,变量是用来存储信息的容器,但是一个变量只能存储一条信息。而数组呢,可以看作是存储多条信息的容器,其存储的数据可以是我们学过的任意数据类型。

JavaScript 基础到高级
Canvas游戏开发
原生JavaScipt案例合集
JavaScript +DOM基础

数组由中括号进行包裹,存储的数据之间使用逗号隔开。如:

var arr = [10,"hello",true,null,undefined,Math.random(),function(){},new Object()]

数组是一系列数据的集合,所以数据是有长度的,通过 length 属性可以获取数组中元素的个数。

数组具有索引,索引从 0 开始,依次递增,最大的索引值 arr.length - 1。

通过索引可以获取其在数组中对应的值,如:

​ 数组中的第一个值 arr[0]

​ 数组中的最后一个值 arr[arr.length - 1]

通过指定索引不仅可以获取值,还可以用来对值进行修改操作。

1.1 数组对象的创建方式

  • 字面量的方式 var arr = [10,20,30,40,50,60]
 var arr = [10,20,30,40,50,60];
console.log("arr:",arr);

//通过索引获取值
console.log("数组arr中第一个元素是:",arr[0]);
console.log("数组中元素的个数:",arr.length);
console.log("数组arr中最后一个元素是:",arr[arr.length - 1]);

//通过索引修改值
arr[2] = 300;
console.log("arr:",arr);

//通过索引添加值
arr[6] = 70;
console.log("arr:",arr);
  • 通过new关键字 var arr = new Array();
    • 如果 new Array(arg) 中的参数 arg 只是一个数值类型的整数,那么代表的是数组的长度
    • 如果上面参数 arg 是其它数据类型,或者是多个参数,那么代表的是数组中的元素
var array = new Array();
console.log("array:",array);//array: []  这是一个空数组

array = new Array(10);
console.log("array:",array);//array: (10) [empty × 10]  这是一个长度未10的数组,但是数组中没有值
// 通过索引添加值
array[0] = 100;
array[1] = 200;
array[8] = 900;
array[9] = 1000;
array[14] = 14000;
console.log("array:",array);//array: (10) [100, 200, empty × 6, 900, 1000]

array = new Array("10");
console.log("array:",array);//array: ["10"]

// array = new Array(3.14);
// console.log("array:",array);//RangeError: Invalid array length

array = new Array(10,20);
console.log("array:",array);//array: (2) [10, 20]

1.2 数组中的属性

length 属性用于获取数组中元素的个数

constructor 获取数组对象的构造函数

var arr = [10,20,30,40];
console.log("arr:",arr,"数据类型:",typeof arr);//arr: (4) [10, 20, 30, 40] 数据类型: object

//length 获取数组中元素的个数
console.log("数组中元素的个数:",arr.length);//数组中元素的个数: 4

//construtor 获取指定对象构造函数
console.log("数组的构造函数:",arr.constructor);//数组的构造函数: ƒ Array() { [native code] }

//构造函数和普通函数,最明显的区别就是构造函数的首字母大写

1.3 数组中的方法

  1. 数组转字符串的方法

    toString() 将数组对象转换成字符串对象

    ​ 这个方法没有参数

    ​ 返回值是一个字符串

    join(seperator?) 将数组对象按照指定的分隔符转换成字符串对象

    ​ 参数 seperator 可选参数。指定分隔符号,是一个字符串类型

    ​ 返回值是一个字符串

    var arr = [10,20,30,40,50,60];
    console.log("arr:",arr,"数据类型:",typeof arr);//arr: (6) [10, 20, 30, 40, 50, 60] 数据类型: object
    
    // toString()   将数组对象转换成字符串对象
    var str = arr.toString();
    console.log("str:",str,"数据类型:",typeof str);//str: 10,20,30,40,50,60 数据类型: string
    
    // join(seperator?)    将数组对象按照指定的分隔符转换成字符串对象
    var str2 = arr.join();
    console.log("str2:",str2,"数据类型:",typeof str2);//str2: 10,20,30,40,50,60 数据类型: string
    
    str2 = arr.join("&");
    console.log("str2:",str2,"数据类型:",typeof str2);//str2: 10&20&30&40&50&60 数据类型: string
    
  2. 数组首尾操作方法

    push(args…) 向数组的末尾追加一个或多个元素

    unshift(args…) 向数组的起始位置追加一个或多个元素

    ​ 参数 args 要向数组中添加的数据,可以是任意数据类型

    ​ 返回值 添加数据后,新的数组长度

    ​ 这两个方法,都使原数组结构发生了改变

    pop() 删除数组中最后一项

    shift() 删除数组中的第一项

    ​ 这两个方法没有参数

    ​ 返回值 返回删除的那一项元素

    var arr = ["苹果","樱桃","猕猴桃","葡萄"];
    console.log("原arr:",arr);//原arr: (4) ["苹果", "樱桃", "猕猴桃", "葡萄"
    
    // push(args...)  向数组的末尾追加一个或多个元素
    var len = arr.push("橙子","桃");
    console.log("结尾添加两项后arr:",arr);//结尾添加一项后arr: (6) ["苹果", "樱桃", "猕猴桃", "葡萄", "橙子", "桃"]
    console.log("结尾添加两项后数组长度:",len);//结尾添加两项后数组长度: 6
    
    // unshift(args...)  向数组的起始位置追加一个或多个元素
    var len2 = arr.unshift("西瓜","柠檬");
    console.log("起始位置追加两项后arr:",arr);//起始位置追加两项后arr: (8) ["西瓜", "柠檬", "苹果", "樱桃", "猕猴桃", "葡萄", "橙子", "桃"]
    console.log("起始位置追加两项后数组长度:",arr.length);//起始位置追加两项后数组长度: 8
    
    // pop()  删除数组中最后一项
    var tipEle = arr.pop();
    console.log("删除最后一项后arr:",arr);//(7) ["西瓜", "柠檬", "苹果", "樱桃", "猕猴桃", "葡萄", "橙子"]
    console.log("删除的元素是:",tipEle);//删除的元素是: 桃
    
    // shift() 删除数组中的第一项
    var headEle = arr.shift();
    console.log("删除第一项后arr:",arr);//删除第一项后arr: (6) ["柠檬", "苹果", "樱桃", "猕猴桃", "葡萄", "橙子"]
    console.log("删除的元素是:",headEle);//删除的元素是: 西瓜
    
  3. 插入、删除、替换的方法

    splice(startIndex,delCount,addEles…) 在指定索引处,删除指定数量的元素,并追加新的元素

    ​ 参数 startIndex 插入或删除元素的起始索引

    ​ delCount 指定索引处开始删除的元素的个数

    ​ addEles… 在指定索引处插入一个或多个元素

    ​ 返回值 返回的是删除的元素组成的数组

    var arr = [10,20,30,40,50,60];
    console.log("arr:",arr);//arr: (6) [10, 20, 30, 40, 50, 60]
    // splice(startIndex,delCount,addEles...)   在指定索引处,删除指定数量的元素,并追加新的元素
    var delEles = arr.splice();
    console.log("arr:",arr,"delEles:",delEles);//arr: (6) [10, 20, 30, 40, 50, 60] delEles: []
    
    delEles = arr.splice(4);//指定一个起始索引,那么就会删除这个索引后面所有的元素
    console.log("arr:",arr,"delEles:",delEles);//arr: (4) [10, 20, 30, 40] delEles: (2) [50, 60]
    
    delEles = arr.splice(2,1);
    console.log("arr:",arr,"delEles:",delEles);//arr: (3) [10, 20, 40] delEles: [30]
    
    delEles = arr.splice(1,0,300,500,600,800);
    console.log("arr:",arr,"delEles:",delEles);//arr: (7) [10, 300, 500, 600, 800, 20, 40] delEles: []
    
  4. 数组拼接 和 数组片段截取

    concat(args) 拼接一个或多个元素或数组

    ​ 参数 args 拼接的元素或数组

    ​ 返回值是拼接后的新数组

    slice(startIndex,endIndex) 截取指定索引之间的元素

    ​ 参数 startIndex 截取数组的起始索引

    ​ endIndex 截取数组的结束索引;可以省略,如果省略,截取到数组的末尾

    ​ 返回值 截取的元素组成的新数组

    上面两个方法,不会改变原数组

    var arr = ["苹果","香蕉","橘子","火龙果","猕猴桃"];
    console.log("原数组arr:",arr);//原数组arr: (5) ["苹果", "香蕉", "橘子", "火龙果", "猕猴桃"]
    
    // concat(args)  拼接一个或多个元素或数组
    var newArr = arr.concat("橙子","柚子",["西瓜","桃"]);
    console.log("拼接后arr:",arr);//拼接后arr: (5) ["苹果", "香蕉", "橘子", "火龙果", "猕猴桃"]
    console.log("拼接后返回的数组newArr:",newArr);拼接后返回的数组newArr: (9) ["苹果", "香蕉", "橘子", "火龙果", "猕猴桃", "橙子", "柚子", "西瓜", "桃"]
    
    
    // slice(startIndex,endIndex)  截取指定索引之间的元素
    //指定一个起始索引,一直截取到最后
    var sliceArr = newArr.slice(6);
    console.log("截取后newArr:",newArr);//截取后newArr: (9) ["苹果", "香蕉", "橘子", "火龙果", "猕猴桃", "橙子", "柚子", "西瓜", "桃"]
    console.log("截取的数组:",sliceArr);//截取的数组: (3) ["柚子", "西瓜", "桃"]
    
    //指定两个参数:截取两个索引之间的数组片段  左闭右开
    sliceArr = newArr.slice(3,6);
    console.log("截取的数组:",sliceArr);//截取的数组: (3) ["火龙果", "猕猴桃", "橙子"]
    
  5. 倒叙 和 排序

    reverse() 对数组中的元素进行倒叙排列;没有参数

    sort(callbackfn) 对数组中的元素进行排序

    ​ 参数 callbackfn是一个回调函数,通过这个回调函数指定排序的规则

    两个方法改变了原数组

    var arr = [10,20,30,40,50,60];
    console.log("原数组arr:",arr);//原数组arr: (6) [10, 20, 30, 40, 50, 60]
    
    // reverse() 对数组中的元素进行倒叙排列;没有参数
    arr.reverse();
    console.log("倒叙后arr:",arr);//倒叙后arr: (6) [60, 50, 40, 30, 20, 10]
    
    
    // sort(callbackfn)  对数组中的元素进行排序
    var array = [10,8,34,90,23,123,67,89];
    console.log("原array:",array);//原array: (8) [10, 8, 34, 90, 23, 123, 67, 89]
    //不添加任何参数,默认按照 ASCII码 排序
    array.sort();
    console.log("默认排序后array:",array);//默认排序后array: (8) [10, 123, 23, 34, 67, 8, 89, 90]
    
    //通过 回调函数指定排序的规则
    //指定升序的规则(按照数值大小)
    array.sort(function (a,b) {
        return a - b;
    });
    console.log("指定升序的规则array:",array);//指定升序的规则array: (8) [8, 10, 23, 34, 67, 89, 90, 123]
    
    //指定降序的规则(按照数值大小)
    array.sort(function (a,b) {
        return b - a;
    });
    console.log("指定降序的规则array:",array);//指定降序的规则array: (8) [123, 90, 89, 67, 34, 23, 10, 8]
    

    1.4 数组的遍历

    使用for循环,一一获取数组中的元素

    var arr = ["苹果", "香蕉", "橘子", "火龙果", "猕猴桃", "橙子", "柚子", "西瓜", "桃"];
    
    //使用 for 循环对数组进行遍历,也就是一一获取数组中的元素   数组索引从0开始
    for (var i = 0; i < arr.length; i++) {
        console.log("数组中第" + (i + 1) + "个元素是:" + arr[i]);
    }
    

二、字符串对象

前面介绍数据类型时,介绍过字符串是由引号包裹的文本。

字符串除了可能是基本数据类型外,还可能使引用数据类型,所以它比较特殊。其它比较特殊的放在高级课中讲

字符串是一个类数组,既然是类数组,就具有索引和长度,索引从 0开始,长度通过 length 属性获取

类数组可以通过索引去读取对应的值,但是不能添加和修改。

举例:“Hello” ‘男’

2.1 字符串对象的创建方式

  • 字面量的方式 var str = “Hello World!”;

  • new关键字 var str = new String();

    String()构造函数中可以添加字符串参数 如 var str = new String(“Hello World!”)

    //字符串对象的创建方式一: 字面量的方式
    var str = "Hello String";
    console.log("str:",str,"数据类型:",typeof str);//str: Hello String 数据类型: string 这是一个基本数据类型
    
    //通过索引去读取对应的字符
    console.log("字符串中的第一个字符:",str[0]);//字符串中的第一个字符: H
    console.log("字符串中字符的个数:",str.length);//字符串中字符的个数: 12
    console.log("字符串中的最后一个字符:",str[str.length - 1]);//字符串中的最后一个字符: g
    
    //通过索引不可以修改和添加字符
    str[5] = "&";
    console.log("str:",str);//str: Hello String
    
    //字符串对象的创建方式二:new 关键字
    var str2 = new String();
    console.log("str2:",str2,"数据类型:",typeof str2);//str2: String {""} 数据类型: object  这是一个引用数据类型
    
    str2 = new String("Hello new String");
    console.log("str2:",str2);//str2: String {"Hello new String"}
    

2.2 字符串对象的属性

length 获取字符串中字符的个数

constructor 获取字符串对象的构造函数

var str = "Hello World!";
// length  获取字符串中字符的个数
console.log("str长度:",str.length);//str长度: 12

// constructor  获取字符串对象的构造函数
console.log("str的构造函数:",str.constructor);//str的构造函数: ƒ String() { [native code] }

2.3 字符串对象方法

  • concat(args…) 方法拼接一个或多个字符或字符串

​ 参数 args 字符或字符串

//字符串拼接方法一:利用 + 运算符   只要是有字符串存在的 + 运算都是字符串拼接操作
var str = "Hello";
console.log("str:",str);//str: Hello

str += " World";
console.log("+拼接字符串str:",str);//+拼接字符串str: Hello World

//字符串拼接方式二:利用 concat() 方法
var newStr = str.concat("!"," Welcome to code World!")
console.log("concat拼接后原字符串str:",str);//concat拼接后原字符串str: Hello World  原字符串没有发生改变
console.log("concat拼接后返回的新字符串newStr:",newStr);//concat拼接后返回的新字符串newStr: Hello World! Welcome to code World!
  • split(splitter,limit) 方法用来按照指定的切割符切割字符串

​ 参数 splitter 指定切割符,可以省略

​ limit 切割后,数组保留的长度

​ 返回值是切割后的字符组成的数组

//split(splitor)  方法用来按照指定的切割符切割字符串
var str = "Hello World! Welcome to code World!";
console.log("str:",str);//str: Hello World! Welcome to code World!

//不给任何参数:将整个字符串作为数组的元素
var arr = str.split();
console.log("arr:",arr);//arr: ["Hello World! Welcome to code World!"]

//给一个参数,切割符
arr = str.split(" ");
console.log("arr:",arr);//arr: (6) ["Hello", "World!", "Welcome", "to", "code", "World!"]

//给两个参数,限定切割后数组的长度
arr = str.split(" ",2);
console.log("arr:",arr);//arr: (2) ["Hello", "World!"]
  • 截取字符串的方法

    slice(startIndex,endIndex) 获取指定索引之间的字符串片段,左闭右开

    subString(startIndex,endIndex) 获取指定索引之间的字符串片段,左闭右开

    subStr(startIndex,howmany) 获取指定索引处开始指定数量的字符串片段

    返回值都是截取的字符串片段

    var str = "Hello World! Welcome to code World!";
    console.log("str:",str);//str: Hello World! Welcome to code World!
    
    // slice(startIndex,endIndex)  获取指定索引之间的字符串片段,左闭右开
    //没有任何参数  直接相当于复制字符串
    var sliceStr = str.slice();
    console.log("sliceStr:",sliceStr);//sliceStr: Hello World! Welcome to code World!
    
    //指定一个参数  从这个指定的索引开始截取到字符串的最后
    sliceStr = str.slice(13);
    console.log("sliceStr:",sliceStr);//sliceStr: Welcome to code World!
    
    //指定两个参数  获取两个参数之间的字符串片段 [a,b)
    sliceStr = str.slice(13,20);
    console.log("sliceStr:",sliceStr);//sliceStr: Welcome
    
    // substring(startIndex,endIndex) 获取指定索引之间的字符串片段,左闭右开
    //用法 同slice  可以不设置参数、一个参数、两个参数
    subStr = str.substring(13,20);
    console.log(subStr);//Welcome
    
    // substr(startIndex,howmany)  获取指定索引处开始指定数量的字符串片段
    var newStr = str.substr();
    console.log("newStr:",newStr);// newStr: Hello World! Welcome to code World!
    
    newStr = str.substr(13);
    console.log("newStr:",newStr);//newStr: Welcome to code World!
    
    //两个参数:第一个参数是截取的起始索引  第二个参数截取的字符个数
    newStr = str.substr(13,7);
    console.log("newStr:",newStr);//newStr: Welcome
    
  • 索引相关的方法

    charAt(index) 获取指定索引处的字符 ( [index]也能获取)

    indexOf(searchVale,startIndex?) 从指定索引处开始查找指定字符第一次出现的索引值,如果找不到返回-1

    lastIndexOf(searchVale,startIndex?) 从指定索引处开始查找指定字符最后一次出现的索引值

    var str = "Hello World! Welcome to code World!";
    // charAt(index)  获取指定索引处的字符 ( [index]也能获取)
    var code = str.charAt(7);
    console.log("code:",code);//code: o
    
    code = str[7];
    console.log("code:",code);//code: o
    //同样 charAt 方式也是只能读取数据 不能修改数据
    
    
    // indexOf(searchVale,startIndex?)  从指定索引处开始查找指定字符第一次出现的索引值,如果找不到返回-1
    //只有一个参数,默认从第一个索引开始查找
    var idx = str.indexOf("o");
    console.log("查找的o在字符串中第一次出现的位置:",idx);//查找的o在字符串中第一次出现的位置: 4
    
    //两个参数:第一个参数为要查找字符或字符片段   第二个参数指定起始查找的索引
    idx = str.indexOf("o",12);
    console.log("从索引12开始查找的o在字符串中第一次出现的位置:",idx);//从索引12开始查找的o在字符串中第一次出现的位置: 17
    
    // lastIndexOf(searchVale,startIndex?) 从指定索引处开始查找指定字符最后一次出现的索引值
    // 用法同 indexOf() 只不过从后往前找,但是索引还是正向从0开始计算
    var lIdx = str.lastIndexOf("o");
    console.log("o在字符串中最后一次出现的索引:",lIdx);//o在字符串中最后一次出现的索引: 30
    

三、正则表达式对象

概述:

​ 正则表达式(regular expression)描述了一种字符串匹配模式(pattern);

​ 可以用来检查一个串中是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

3.1 正则表达式对象的创建方式

  • 字面量的方式 var patt = /匹配模式/修饰符;

    ​ / / 边界的意思 修饰符可以省略

    //正则表达式操作的式字符串
    var str = "Hello China! 你好,中国!"
    
    //匹配汉字  Unicode码   是一个固定用法,中文只能在正则表达式里这样表示
    var patt = /[\u4e00-\u9fa5]/;
    //test()  匹配指定字符串中是否含有指定规则的字符  返回一个布尔值,匹配成功 返回true 否则返回false
    console.log(patt.test(str));//true
    console.log(patt.test("hehe"));//false
    
  • 使用new关键字 var patt = new RegExp(/匹配模式/,修饰符);

    //匹配字符串中是否含有数字
    var reg = new RegExp(/[0-9]/);
    console.log(reg.test("hehe"));//false
    console.log(reg.test("hehe123"));//true
    

3.2 正则表达式中的方法

test() 检测一个字符串是否匹配某种模式,如果字符串中含有匹配的文本,则返回true,否则返回false

exec() 检索字符串中的指定值;返回符合指定规则的第一个字符或字符串信息,返回值是一个数组;

var patt = /[\u4e00-\u9fa5]/;
// test()  检测一个字符串是否匹配某种模式,如果字符串中含有匹配的文本,则返回true,否则返回false
console.log(patt.test("test方法检测本字符串中是否含有汉字!!"));//true
console.log(patt.test("test method test string has chinese ?"));//false

// exec()  检索字符串中的指定值;返回符合指定规则的第一个字符或字符串信息,返回值是一个数组;
console.log(patt.exec("exec检测本字符串符合规则的第一个字符!!"));//["检", index: 4, input: "exec检测本字符串符合规则的第一个字符!!"]
console.log(patt.exec("exec method get the first chinese char in string"));//null

3.3 字符串中可以使用正则表达式的方法

split() 按照指定的匹配模式去切割字符串,返回切割后的字符串组成的数组

replace() 按照指定的规则替换字符串中的字符

search() 查找符合指定匹配规则的字符在原字符串中第一次出现的位置

match() 查找符合指定规则的字符或字符串信息,并返回一个数组

var str = "你好,Jack! 欢迎来到中国!";

// split()   按照指定的匹配模式去切割字符串,返回切割后的字符串组成的数组
var arr = str.split(' ');
console.log("arr:",arr);//arr: (2) ["你好,Jack!", "欢迎来到中国!"]

var pattArr = str.split(/\s/);// \s 正则表达式中的元字符 代表空格
console.log("pattArr:",pattArr);//pattArr: (2) ["你好,Jack!", "欢迎来到中国!"]

// replace()  按照指定的规则替换字符串中的字符  返回一个新的字符串
//替换 字符串片段 Jack
var rStr = str.replace("Jack","Lucy");
console.log("rStr:",rStr);//rStr: 你好,Lucy! 欢迎来到中国!

var regStr = str.replace(/Jack/,"David");
console.log("regStr",regStr);//regStr 你好,David! 欢迎来到中国!

//替换 ! 为 。
rStr = str.replace("!","。");
console.log("rStr:",rStr);//rStr: 你好,Jack。 欢迎来到中国!  只能替换一个

var regStr = str.replace(/!/g,"。");// 正则表达式中的修饰符  g 执行全局匹配  会将所有匹配到的内容进行替换
console.log("regStr",regStr);//regStr 你好,Jack。 欢迎来到中国。

// search()  查找符合指定匹配规则的字符在原字符串中第一次出现的位置
var idx = str.search("!");
console.log("idx:",idx);//idx: 7

var regIdx = str.search(/[a-z]/);//正则表达式中的匹配模式 [a-z] 匹配的是所有的小写英文字母
console.log("regIdx:",regIdx);//regIdx: 4

match() 和 exec() 方法的区别:

// 匹配中文的正则表达式
var patt = /[\u4e00-\u9fa5]/;

//声明一个字符串
var str = "你好,Jack! 欢迎来到中国!";

// exec()  正则表达式中的方法。检索字符串中的指定值;返回符合指定规则的第一个字符或字符串信息,返回值是一个数组;
var execArr = patt.exec(str);
console.log("execArr:",execArr);//execArr: ["你", index: 0, input: "你好,Jack! 欢迎来到中国!"]

// match()  字符串方法。查找符合指定规则的字符或字符串信息,并返回一个数组
var matchArr = str.match(patt);
console.log("matchArr:",matchArr);//matchArr: ["你", index: 0, input: "你好,Jack! 欢迎来到中国!"]

//执行全局匹配的正则表达式
var patt2 = /[\u4e00-\u9fa5]/g;

execArr = patt2.exec(str);
console.log("execArr:",execArr);//execArr: ["你", index: 0, input: "你好,Jack! 欢迎来到中国!"]

matchArr = str.match(patt2);
console.log("matchArr:",matchArr);//matchArr: (8) ["你", "好", "欢", "迎", "来", "到", "中", "国"]

//区别:一个是正则表达式中的方法,正则表达式对象才可以调用;一个是字符串中的方法,只能是字符串对象进行调用
//在执行全局匹配时,修饰符 g 对 exec 方法无效

3.4 修饰符

g 执行全局匹配

i 执行忽略大小写的匹配

m 执行多行匹配

// g   执行全局匹配
var pass = "xshls123";
var arr = pass.match(/[s-z]/);
console.log("没有执行全局匹配,返回第一个符合条件元素组成的数组:",arr);
//匹配结果:没有执行全局匹配,返回第一个符合条件元素组成的数组: ["x", index: 0, input: "xshls123"]

arr = pass.match(/[s-z]/g);
console.log("执行全局匹配,返回所有符合条件元素组成的数组:",arr);
//匹配结果:执行全局匹配,返回所有符合条件元素组成的数组: (3) ["x", "s", "s"]


// i   执行忽略大小写的匹配
var str = "Hello World!";
var arr2 = str.match(/[A-K]/g);
console.log("没有执行忽略大小写的操作arr2:",arr2);//没有执行忽略大小写的操作arr2: ["H"]

var arr2 = str.match(/[A-K]/gi);
console.log("执行忽略大小写的操作arr2:",arr2);//执行忽略大小写的操作arr2: (3) ["H", "e", "d"]


// m  执行多行匹配
var mStr = "Hello\nWorld";  // \n 换行的转义字符
console.log("mStr:",mStr);

//匹配字符串中的单词是否有以 W 开头的单词
var patt = /^W/; // ^ 正则表达式中的量词,代表以 指定模式开头  注意此 ^ 位置紧跟在起始边界后面
var flag = patt.test(mStr);
console.log("没有执行多行匹配的结果:",flag === true ? "存在W开头的单词" : "不存在W开头的单词");
//打印结果 没有执行多行匹配的结果: 不存在W开头的单词

patt = /^W/m;
flag = patt.test(mStr);
console.log("执行多行匹配的结果:",flag === true ? "存在W开头的单词" : "不存在W开头的单词");
//打印结果  执行多行匹配的结果: 存在W开头的单词

练习:获取字符串 “Hello Jack!! 欢迎你来到中国!!” 中所有的汉字。

3.5 方括号

用于查找某个范围内的字符

表达式描述
[abc]查找方括号之间的任何字符。
[^abc]查找任何不在方括号之间的字符。
[0-9]查找任何从 0 至 9 的数字。
[a-z]查找任何从小写 a 到小写 z 的字符。
[A-Z]查找任何从大写 A 到大写 Z 的字符。
[A-z]查找任何从大写 A 到小写 z 的字符。
[adgk]查找给定集合内的任何字符。
[^adgk]查找给定集合外的任何字符。
(red|blue|green)查找任何指定的选项。

注意:[A-z] 这里有六个特殊的字符存在于 Z 到 a之间,所以严格意义上讲,它并不能真正的匹配所有英文字母,因为还有可能匹配到特殊字符。详见 ASCII 码表。

var str = "an123Zs`+=ex|\hg[000]*^44ioS";
var patt = /[A-z]/g;

console.log(str.match(patt));//(15) ["a", "n", "Z", "s", "`", "e", "x", "h", "g", "[", "]", "^", "i", "o", "S"]

//严格上,如果只是匹配所有的大小写英文字母,请使用以下匹配方式
// patt = /[A-Za-z]/g;
patt = /[A-Z]/gi;
console.log(str.match(patt));//(11) ["a", "n", "Z", "s", "e", "x", "h", "g", "i", "o", "S"]

// [abc]查找方括号之间的任何字符。
patt = /[a3Zo85vs]/gi;
console.log(str.match(patt));//(6) ["a", "3", "Z", "s", "o", "S"]

// [^abc]查找任何不在方括号之间的字符。
patt = /[^a3Zo85vs]/gi;
console.log(str.match(patt));//(21) ["n", "1", "2", "`", "+", "=", "e", "x", "|", "h", "g", "[", "0", "0", "0", "]", "*", "^", "4", "4", "i"]    

3.6 元字符

元字符(Metacharacter)是拥有特殊含义的字符:

元字符描述
.查找单个字符,除了换行和行结束符。
\w查找单词字符。
\W查找非单词字符。
\d查找数字。
\D查找非数字字符。
\s查找空白字符。
\S查找非空白字符。
\b匹配单词边界。
\B匹配非单词边界。
\0查找 NULL 字符。
\n查找换行符。
\f查找换页符。
\r查找回车符。
\t查找制表符。
\v查找垂直制表符。
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。
var str = "Hello123";
//指定匹配规则,匹配所有的数字
// var patt = /[0-9]/g;
var patt = /\d/g;
console.log(str.match(patt));//(3) ["1", "2", "3"]

//指定匹配规则,匹配所有的非数字
// patt = /[^0-9]/g;
patt = /\D/g;
console.log(str.match(patt));//(5) ["H", "e", "l", "l", "o"]

3.7 量词

量词描述
n+匹配任何包含至少一个 n 的字符串。例如,/a+/ 匹配 “candy” 中的 “a”,“caaaaaaandy” 中所有的 “a”。
n*匹配任何包含零个或多个 n 的字符串。例如,/bo*/ 匹配 “A ghost booooed” 中的 “boooo”,“A bird warbled” 中的 “b”,但是不匹配 “A goat grunted”。
n?匹配任何包含零个或一个 n 的字符串。例如,/e?le?/ 匹配 “angel” 中的 “el”,“angle” 中的 “le”。
n{X}匹配包含 X 个 n 的序列的字符串。例如,/a{2}/ 不匹配 “candy,” 中的 “a”,但是匹配 “caandy,” 中的两个 “a”,且匹配 “caaandy.” 中的前两个 “a”。
n{X,}X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。例如,/a{2,}/ 不匹配 “candy” 中的 “a”,但是匹配 “caandy” 和 “caaaaaaandy.” 中所有的 “a”。
n{X,Y}X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。例如,/a{1,3}/ 不匹配 “cndy”,匹配 “candy,” 中的 “a”,“caandy,” 中的两个 “a”,匹配 “caaaaaaandy” 中的前面三个 “a”。注意,当匹配 “caaaaaaandy” 时,即使原始字符串拥有更多的 “a”,匹配项也是 “aaa”。
n$匹配任何结尾为 n 的字符串。
^n匹配任何开头为 n 的字符串。
?=n匹配任何其后紧接指定字符串 n 的字符串。
?!n匹配任何其后没有紧接指定字符串 n 的字符串。

3.8 分组

虽然量词的出现,能帮助我们处理一排密紧相连的同类型字符。但这是不够的,我们用中括号表示范围内选择,大括号表示重复次数。如果想获取重复多个字符,我们就要用小括号进行分组了。

// 重复出现多个字符
console.log("abcabcabchhh".match(/(abc){3}/g));

分组的反向引用

反向引用标识是对正则表达式中的匹配组捕获的子字符串进行编号,通过“\编号(在正则表达式中)”,“$编号(在正则表达式外)”进行引用。从1开始计数。有一个分组就对应一个编码。

如果替换参数为一个函数,能对我们截取到的字符串进行进一步操作,更加灵活多变。带函数的方式是我们用的比较多的。

//反向引用标识是对正则表达式中的匹配组捕获的子字符串进行编号,通过“\编号(在正则表达式中)”,
// “$编号(在正则表达式外)”进行引用。从1开始计数。有一个分组就对应一个编码。
var patt = /(stu)(tea)\1\2\1/;
console.log(patt.test("stutea"));//false
console.log(patt.test("stuteastutea"));//false
console.log(patt.test("stuteastuteastu"));//true

console.log(RegExp.$1);
console.log(RegExp.$2);
console.log(RegExp.$3);

中文

匹配中文:[\u4e00-\u9fa5]

四、Date对象

Date对象可以存储任意一个日期,并且可以精确到毫秒数(1/1000秒);

4.1 Date对象的创建

  • var d = new Date(); //Date 对象会自动把当前日期和时间保存为其初始值
  • var d = new Date(milliseconds); //new Date(100000000000);
  • var d = new Date(dateString); //new Date(“Oct 11,2015”);
  • var d = new Date(year, month, day, hours, minutes, seconds, milliseconds); //new Date(2016,4,1); 2016年5月1日 0-11代表1-12月

4.2 Date对象中的转换方法

  • toString() 把Date对象转换为字符串
  • toLocaleString() 根据本地时间格式,把Date对象转换为字符串
  • toDateString() 把Date对象的日期部分转换为字符串
  • toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串
  • toTimeString() 把 Date对象的时间部分转换为字符串
  • toLocaleTimeString() 据本地时间格式,把 Date 对象的时间部分转换为字符串
  • valueOf() 返回Date对象的原始值;这里的原始值指的是1970年1月1日以来(到指定日期时间)的毫秒数,与getTime()方法获取的值一样 myDate.valueOf();

4.3 Date对象中的get/set方法

  • get/setTime() 返回/设置时间,单位毫秒数,计算从1970年1月1日零时到日期对象所指的日期的毫秒数 myDate.setTime(2000000000000);
  • get/setFullYear() 返回/设置四位数的Date对象年份
  • get/setMonth() 返回/设置Date对象月份 (0 ~ 11 代表 1-12月)
  • get/setDate() 返回/设置Date对象一个月中的某一天 (1 ~ 31)
  • getDay() 从 Date对象返回一周中的某一天 (返回值是0<周日>到6<周六>之间的一个整数)
  • get/setHours() 返回/设置Date对象的小时 (0 ~ 23)
  • get/setMinutes() 返回/设置Date对象的分钟 (0 ~ 59)
  • get/setSeconds() 返回/设置Date对象的秒数 (0 ~ 59)

4.4 封装日期格式化函数:

/**
 * 获取当前时间并进行格式化输出  "2019年05月01日 星期六 13时:06分:01秒"
 * @function formatdate
 * @returns 当前日期和时间
 */
function formatdate(){
    var weeks = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
    var theDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
    var week = date.getDay();
    var hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
    var min = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
    var second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
    return year + "年" + month + "月" + theDate + "日\t" + weeks[week] + "\t" + hour + "时:" + min + "分:" + second + "秒";
}

4.5 Date静态方法

Date.now() 获取当前时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MagnumHou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值