资讯专栏INFORMATION COLUMN

JavaScript红宝书笔记(六)---RegExp类型

eternalshallow / 1974人阅读

摘要:第二个循环使用构造函数在每次循环中创建正则表达式。布尔值,表示是否设置了标志。整数,表示开始搜索下一个匹配项的字符位置,从算起。正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

1.var someDate = new Date(Date.parse("May 25, 2004"));可用来计算时间差

//取得开始时间
var start = Date.now();
//调用函数
doSomething();
//取得停止时间
var stop = Date.now(),
result = stop – start;

new Date()也行,不过需要转换成字符串来计算

2.创建正则表达式:

var expression = / pattern / flags ;
var pattern1 = /[bc]at/i;

var pattern2 = new RegExp("[bc]at", "i");

正则表达式可以带有一个或多个标志:

g:表示全局( global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即
停止;
i:表示不区分大小写( case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
m:表示多行( multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模
式匹配的项。

/*
* 匹配字符串中所有"at"的实例
*/
var pattern1 = /at/g;
/*
* 匹配第一个"bat"或"cat",不区分大小写
*/
var pattern2 = /[bc]at/i;
/*
* 匹配所有以"at"结尾的 3 个字符的组合,不区分大小写
*/
var pattern3 = /.at/gi;

3.由于 RegExp 构造函数的模式参数是字符串,所有元字符都必须双重转义

/[bc]at/             "[bc]at"
/.at/                 ".at"
/name/age/            "name/age"
/d.d{1,2}/           "d.d{1,2}"
/whello123/       "whello123"

4.正则表达式字面量始终会共享同一个 RegExp 实例,而使用构造函数创建的每一个新 RegExp 实例都是一个新实例

var re = null,
    i;
for (i=0; i < 10; i++){
    re = /cat/g;
    re.test("catastrophe");
}
for (i=0; i < 10; i++){
    re = new RegExp("cat", "g");
    re.test("catastrophe");
}

在第一个循环中,即使是循环体中指定的,但实际上只为/cat/创建了一个 RegExp 实例。由于实例属性不会重置,所以在循环中再次调用 test()方法会失败。这是因为第一次调用 test()找到了"cat",但第二次调用是从索引为 3 的字符(上一次匹配的末尾)开始的,所以就找不到它了。由于会测试到字符串末尾,所以下一次再调用 test()就又从开头开始了。
第二个循环使用 RegExp 构造函数在每次循环中创建正则表达式。因为每次迭代都会创建一个新的RegExp 实例,所以每次调用 test()都会返回 true

5.RegExp实例属性:
RegExp 的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
global:布尔值,表示是否设置了 g 标志。
ignoreCase:布尔值,表示是否设置了 i 标志。
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从 0 算起。
multiline:布尔值,表示是否设置了 m 标志。
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

6.RegExp实例方法:

RegExp 对象的主要方法是 exec(),该方法是专门为捕获组而设计的
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
alert(matches.index); // 0
alert(matches.input); // "mom and dad and baby"
alert(matches[0]); // "mom and dad and baby"
alert(matches[1]); // " and dad and baby"
alert(matches[2]); // " and baby"

其中, index 表示匹配项在字符串中的位置,而 input 表示应用正则表达式的字符串

正则表达式的第二个方法是 test(),它接受一个字符串参数。在模式与该参数匹配的情况下返回true;否则,返回 false。
var text = "000-00-0000";
var pattern = /d{3}-d{2}-d{4}/;
if (pattern.test(text)){
    alert("The pattern was matched.");
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105190.html

相关文章

  • Effective JavaScript读书笔记(一)

    摘要:如果为假值,不传或者传入,函数都会返回但是,传入这个值是完全有可能的,所以这种判断形势是不正确的或者使用来判断也可以原始类型优于封装类型对象拥有六个原始值基本类型布尔值,数字,字符串,,和对象。 作为一个前端新人,多读书读好书,夯实基础是十分重要的,正如盖楼房一样,底层稳固了,才能越垒越高。从开始学习到现在,基础的读了红宝书《JavaScript高级程序设计》,犀牛书《JavaScri...

    zhoutao 评论0 收藏0
  • JavaScript宝书笔记(五)---引用类型

    摘要:在通过对象字面量定义对象时,实际上不会调用构造函数相当于因为是松散类型数据,所以类型也拥有着同样的特性。数组的每一项可以保存任何类型的数据,且数组的大小是可以动态调整的。对数组中的每一项运行给定函数,返回该函数会返回的项组成的数组。 1.在通过对象字面量定义对象时,实际上不会调用 Object 构造函数 var person = { name : Nicholas, a...

    G9YH 评论0 收藏0
  • JavaScript宝书笔记(四)---变量、作用域和内存问题

    摘要:在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。标记清除是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然后再回收其内存 1.在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。 2.当从一个变量向另一个变量复制引用类型的值时,两个变量实际上将引用同一个对象,因此,改变其中一个变量,就会...

    imtianx 评论0 收藏0
  • JavaScript宝书笔记(七)---Function类型

    摘要:函数实际上是对象。所以需要消除这种紧耦合。函数内部属性引用的是函数据以执行的环境对象或者也可以说是值函数的名字仅仅是一个包含指针的变量而已。因此,即使是在不同的环境中执行,全局的函数与函数指向的仍然是同一个函数。 1.函数实际上是对象。每个函数都是 Function 类型的实例,而且都与其他引用类型一样具有属性和方法 2.由于函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变...

    cyrils 评论0 收藏0
  • JavaScript宝书笔记(一)---JS概述、变量及基本数据类型

    摘要:是一个数值可以被转换成数值不能转换成数值可以被转换成数值十六进制数八进制数十进制数十六进制数可以避免,无法使用方法转换成字符串的情况 1.JavaScript由三个部分组成:ECMAScript(提供核心语言功能)、DOM(文档对象模型,提供访问和操作网页内容的方法和接口)、BOM(浏览器对象模型,提供与浏览器交互的方法和接口) 2.JavaScript概念:是一种专为与网页交互而设计...

    sevi_stuo 评论0 收藏0

发表评论

0条评论

eternalshallow

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<