资讯专栏INFORMATION COLUMN

《javascript高级程序设计》笔记:正则表达式

ingood / 1572人阅读

摘要:布尔值,表示是否设置了标志。正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回正则表达式的实例方法方法是否匹配基本语法参数为正则表达式为所要匹配的字符串返回值布尔值在模式与该参数匹配的情况下返回否则,返回。

高程书中对正则部分介绍的偏少,特别是元字符部分几乎没有介绍;我找了几篇不错的博客作为收录:
正则表达式30分钟入门教程
正则表达式-理论基础篇
正则表达式-基础实战篇
最全的常用正则表达式大全

正则表达式的实例属性

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

var pattern1 = /[bc]at/i;

alert(pattern1.global); //false
alert(pattern1.ignoreCase); //true
alert(pattern1.multiline); //false
alert(pattern1.lastIndex); //0
alert(pattern1.source); //"[bc]at"

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

alert(pattern2.global); //false
alert(pattern2.ignoreCase); //true
alert(pattern2.multiline); //false
alert(pattern2.lastIndex); //0
alert(pattern2.source); //"[bc]at"
正则表达式的实例方法 test()方法【是否匹配】

基本语法:regular.test(string)
参数:regular 为正则表达式;string 为所要匹配的字符串
返回值:布尔值

在模式与该参数匹配的情况下返回 true;否则,返回 false。在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下,使用这个方法非常方便,因此,test()方法经常被用在 if 语句中

// 检测输入字符是否为汉字
/^[u4e00-u9fa5]{0,}$/.test("哈哈");    // true

// 校验电话号码
/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$/.test("13365191314")

test()方法常用语校验用户输入的内容是否符合规范

exec()方法【捕获组】

基本语法:regular.exec(string)
参数:regular 为正则表达式;string 为所要匹配的字符串
返回值:数组或null(未匹配成功时)

1.返回数组组成元素

先来个例子:

var result = /(d+):(w+)/.exec("1234:abcd");
console.log(result) // --> ["1234:abcd", "1234", "abcd"]

var result = /(d+):(w+)/.exec("呀!出错了");
console.log(result) // --> null

上面可以看到,匹配不到字符则返回null,匹配到则返回一个数组;那么它的元素组成是怎么样的呢?

返回的数组的第一个元素是与整个正则匹配的文本,后面的组成项依次为正则中的子表达式(组)
例子中的第一个子表达式为(d+),对应的匹配值为"1234";第二个字表达式为(w+),对应的匹配值为"abcd",因此返回的数组为["1234:abcd", "1234", "abcd"]

2.返回数组的详细信息

还是上面的例子:

var result = /(d+):(w+)/.exec("1234:abcd");
console.log(result); // --> ["1234:abcd", "1234", "abcd"]
console.log(result.input); // ---> "1234:abcd"
console.log(result.index); // ---> 0

从上面返回的数组结果可知,数组添加了两个额外的属性,分别是:index, input
index: 匹配文本的第一个字符的位置
input: 指输入的整体的文本

3.exec()匹配注意点

执行exec函数时,尽管是全局匹配的正则表达式,但是exec方法只对指定的字符串进行一次匹配,
获取字符串中第一个与正则表达式想匹配的内容,并且将匹配内容和子匹配的结果存储到返回的数组中,例如:/d/g.exec("a22") ,返回的结果和上面的结果一样: ["2"]

下面这个例子主要是全局捕获和非全局捕获的信息对比:

var text = "cat, bat";
var pattern1 = /.at/;

var matches = pattern1.exec(text);
alert(matches.index);        //0
alert(matches[0]);           //cat
alert(pattern1.lastIndex);   //0

matches = pattern1.exec(text); 
alert(matches.index); //0 
alert(matches[0]); //cat 
alert(pattern1.lastIndex); //0

var pattern2 = /.at/g;

var matches = pattern2.exec(text); 
alert(matches.index); //0 
alert(matches[0]); //cat 
alert(pattern2.lastIndex); //3

matches = pattern2.exec(text);
alert(matches.index);        //5
alert(matches[0]);           //bat
alert(pattern2.lastIndex);   //8

matches = pattern2.exec(text);
alert(matches); //null
alert(pattern2.lastIndex);//0

结论:
1.同一正则表达式,在全局匹配模式下,每次实例的lastIndex属性的值为匹配文本最后一个字符的下一个位置
2.当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

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

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

相关文章

  • es5学习笔记——拜读JavaScript高级程序设计(持续更新)

    摘要:当以非构造函数形式被调用时,等同于。并且,函数执行完毕后,其活动对象不会被销毁,因为匿名函数的作用域链仍然在引用这个活动对象。知道闭包被销毁,创建函数的活动对象才会被回收。 本着尽可能多的完善基础知识,打好基础,做一条有梦想的咸鱼。 1.数据类型 基本数据类型:Undefined,Null,Boolean,Number,String,一种复杂数据类型Object 2.typeof操...

    reclay 评论0 收藏0
  • 正则达式

    摘要:最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。学习目标了解正则表达式语法在中使用正则表达式在中使 JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经验,进行扩展延伸,同时指出书里的一些问题。将会讨论安全的类型检测、惰性载入函数、冻结对象、定时器等话题。1. 安全的类型检测...

    yibinnn 评论0 收藏0
  • javascript高级程序设计笔记:检测数组的方法

    摘要:如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。 如何检测某个变量是否为数组? 《javascript 高级程序设计》原文摘录: 自从 ECMAScript 3 做出规定以后,就出现了确定某个对象是不是数组的经典问题...

    wums 评论0 收藏0
  • JavaScript高级程序设计》(第3版)读书笔记 第4章 变量、作用域和内存问题

    摘要:具体说就是执行流进入下列任何一个语句时,作用域链就会得到加长语句的块。如果局部环境中存在着同名的标识符,就不会使用位于父环境中的标识符访问局部变量要比访问全局变量更快,因为不用向上搜索作用域链。 基本类型和引用类型的值 ECMAscript变量包含 基本类型值和引用类型值 基本类型值值的是基本数据类型:Undefined, Null, Boolean, Number, String ...

    lidashuang 评论0 收藏0

发表评论

0条评论

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