正则表达式

概念

本节讲正则表达式在js中的使用,注意正则对象是一个引用类型。

初始化:字面量和对象使用

与对象的定义一样,我们可以使用字面量定义正则表达式,也可以使用正则对象来定义正则表达式,他们的区别是使用的转义有一定差别。

在使用字面量的时候,使用/ /把正则表达式包起来,后面可以写上匹配模式或者不写,不写默认不是全局匹配,我们在使用的时候,一般都是使用字面量来初始化,因为这样比较简单,转义也不像字符串那么复杂。

// 正则表达式 /at/g 表示匹配所有at  /g表示全局搜索
var pattern1 = /at/g; // 注意不用字符串
var pattern2 = RegExp('/at', 'g');

下面这些需要转义:

正则对象的属性

由于正则对象的属性都可以在字面变量中看得到,所以这些方法用处并不大,知道就好:

exec() 方法(捕获方法)

exec方法执行的结果不是所有匹配的项,而是第一个匹配到的项,他的返回值如下面的代码显示(关于捕获组的概念,我们以后用到了再讲,这里我们知道每次只会匹配一个,在数组的第0个位置返回)

// 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 // 拥有index属性标识匹配项再字符串中的位置
alert(matches.input); // mom and dad and baby // 标识原字符串
alert(matches[0]); //mom and dad  // 标识匹配的字符串
alert(matches[1]); //and dad  //捕获组匹配的字符串
alert(matches[2]); //and baby

exec方法要注意全局标志 /g 对于执行结果的影响,不写/g的时候,不是全局匹配,每一次执行都是从头开始,写了/g,匹配是全局的,下一次匹配是从上一次的基础之上继续往后匹配,看下面的例子就可以说明这个情况

// 不写/g  每一次都是从头开始匹配
var text = 'cat, bat, sat, fat';
var pattern1 = /.at/;
var matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0   //lastIndex方法是问题的关键,注意它是pattern1对象的属性,其实就记录了这个正则匹配到哪个位置了,这里都是0说明是一直从零开始匹配matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0

加上/g我们再看看结果有什么变化

var text = 'cat, bat, sat, fat';
var pattern1 = /.at/g;
var matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //3 //lastIndex标识经过了这次匹配,下次匹配应该从什么位置开始进行matches = pattern1.exec(text);
alert(matches.index); //5  // 标识匹配到的位置
alert(matches[0]); //bat
alert(pattern1.lastIndex); //8

test方法

test方法用于匹配之后返回true false,如果只想知道有无匹配,不想知道具体结果,就用这个。常用于if语句中,判断用户输入是否有效等。

var text = '000-00-0000';
var pattern = /\d{3}-\d{2}-\d{4}/;if (pattern.test(text)) {
alert('matched');  //matched
}

全局属性

通过RegExp的属性,我们可以获知一些全局的正则信息,比如刚刚匹配输入了什么字符串,上次匹配了哪些信息,这个有点像全局的静态变量,我们看看全局属性支持哪些信息的获取

注意使用长属性名和短属性名都可以获取全局属性。我们下面看看长短属性的使用


不支持的功能

最详细的JavaScript高级教程(十一)正则表达式相关推荐

  1. 尚硅谷JavaScript高级教程(javascript实战进阶)学习笔记

    前言 这个是我学习过程中的笔记,分享给大家,希望对大家有用. 学习内容是尚硅谷JavaScript高级教程(javascript实战进阶),这里是视频链接. 我在前面有两篇对于web前端HTML和CS ...

  2. JavaScript高级 面向对象、正则表达式

    JavaScript高级 面向对象.正则表达式 学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript 中使用正则表达式 typora-cop ...

  3. 菜鸟教程 之 JavaScript 高级教程

    From:https://www.runoob.com/js/js-objects.html JavaScript 对象 JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... ( ...

  4. 【javascript高级教程】JavaScript 对象

    JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...及自定义对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法 ...

  5. javascript高级教程

    脚本语言:指WEB浏览器内由解释器执行的语言. javascript对象模型 window->document->form->table,button,text. 1.window为 ...

  6. 【javascript高级教程】JavaScript Array(数组) 对象

    数组对象的作用是:使用单独的变量名来存储一系列的值. 创建数组, 为其赋值: var mycars = new Array(); mycars[0] = "Saab"; mycar ...

  7. 【javascript高级教程】JavaScript 字符串(String) 对象

    String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: var car ...

  8. 【javascript高级教程】JavaScript Number 对象

    JavaScript 只有一种数字类型.可以使用也可以不使用小数点来书写数字. var pi=3.14; // 使用小数点 var x=34; // 不使用小数点 极大或极小的数字可通过科学(指数)计 ...

  9. 【JavaScript高级教程】JavaScript prototype(原型对象)

    所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法. function Person(first, last, age, eyecolor) {this.fi ...

  10. JavaScript高级教程(25)——ES6

    1.ES6简介 1.1什么是es6? ES的全称是ECMAScript,它是由ECMA国际标准组织化制定的一项脚本语言的标准化规范. 1.2为什么使用ES6 每一次标准的诞生都意味着语言的完善,功能的 ...

最新文章

  1. 解决RuntimeError: cuda runtime error (30) : unknown error at /pytorch/aten/src/THC/THCGeneral.cpp:70N
  2. 这些IT圈里的名词,你读对了吗
  3. linux mysql安装失败 lib冲突问题_Linux 安装 Mysql 冲突 问题
  4. 惯性制导精度是多少_我国东风41精度凭啥第一?激光陀螺仪不算啥,太空水漂才真厉害...
  5. Sharepoint 2010使用手记(1)
  6. (并查集)The Suspects
  7. 基于qtc++设计文本编辑器的代码_文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了...
  8. 容器List之ArrayList详解
  9. oracle数据库索引介绍,SQL Server和Oracle数据库索引介绍
  10. 服务器利用docker搭建CTFd平台、webug靶场,并映射到公网IP
  11. android webview 重定向 多次load问题,关于WebView 重定向行为导致的多次加载的问题...
  12. 网吧里电脑提示计算机内存不足,网吧电脑显示虚拟内存不足该怎么办呢
  13. 《R语言入门与数据分析》
  14. ASCII编码以及转换
  15. 什么百度霸屏?百度霸屏是什么意思?
  16. 搜索技巧:最全面的检索知识讲座
  17. 离散数学学习笔记(一)
  18. Excel成绩表打印
  19. NVIDIA Deepstream 4.0笔记(一):加速基于实时AI的视频和图像分析
  20. 对称排序 nyoj 283

热门文章

  1. cisco 交换机 获取 转发表_看完这份1113页的TCP/IP协议+路由与交换机,成功上岸字节跳动...
  2. html如何消除空格字符串,jquery如何去除字符串的空格
  3. pythonqueue线程_python基于queue和threading实现多线程下载实例
  4. 单体 soa 微服务 区别_程序员必须要知道的SOA和微服务的区别
  5. amd核芯显卡控制面板自定义分辨率_显卡是哪个
  6. JAVA基础(1/17)-JAVA语言概述
  7. ASP.NET 4揭秘.第1卷
  8. jstat命令查看jvm的GC情况 (以Linux为例)
  9. PyQt5-网格布局(QGridLayout)-10
  10. stm32系统时钟配置,标准库v3.5