JS中处理字符串最常用的应该就是正则了

同样正则(RegExp)类型也是JS中引用类型的一种

ECMAScript通过 RegExp类型 来支持正则表达式

创建正则

var expression = / pattern / flags;

在上面创建正则实例中 pattern 部分可以是任意简单或复杂的正则表达式,每个正则表达式可以有一个或多个 flags 来标明正则的行为

使用构造函数创建

var expression = new RegExp("pattern","flags"); // 接收两个字符串参数

PS. 由于该构造函数的参数为字符串,所以需要双重转义

比如:

/ \[bc\]at / 等效于 "\\[bc\\]at"

两种创建方式的区别在于(ES3中存在该区别,ES5两者没有区别):

字面量(表达式)创建的正则会共享一个正则实例,而构造函数每次都会创建一个新的实例

对于上述差异我在使用IE11仿真IE5时并未体现出有此差异,这一点大家看看就好

正则支持以下3种标志(ES5)

g:全局模式即找到匹配项后仍会继续向后查找,直到扫描完整个字符串

i :不区分大小写模式、即在正则匹配时忽略正则的大小写

m:多行模式,即一行文本匹配完成后继续匹配下一行

元字符:

元字符就是指在正则中具有特殊功能的字符,如果希望正则匹配这些字符,那么则需要对这些字符进行转义

( [  { \ ^ $ | ) ? * + . ] }

RegExp的实例属性

每个正则实例都有以下属性:

global:是否为全局匹配

ignoreCase:是否忽略大小写

lastIndex:开始下一次搜索的起始位置

multiline:是否多行匹配

source:正则表达式的字符串表示,格式为字面量形式

以上属性虽然详细描述了正则状态,但是实际用处并不大,因为在创建这些实例时我们已经显式地声明了这些信息

RegExp的实例方法

exec()该方法主要为捕获组设计,接收一个参数即要应用正则规则的字符串

返回一个带有index、input属性的Array实例

index属性表示匹配项在整个字符串中的位置

input 属性表示该方法传入的参数字符串也就是“输入”

对于返回的Array实例第一项是与正则规则匹配的字符串

其它项是正则捕获组匹配的字符串

没有匹配项返回null

PS.对于全局模式每次也只返回一个匹配项,重复调用会从上次停止的地方继续,直到比对完整个字符串;对非全局模式的重复调用结果始终的匹配的第一个

test()该方法主要用于我们不关心匹配项是什么只关心是否匹配的情况

接收一个参数即需要匹配的字符串,返回true或false,一般用于条件判断中

继承方法:

关于RegExp继承自Object 的方法

1. toLocaleString、toString 都会返回正则表达式的字面量

2.valueOf 返回正则本身

RegExp构造函数属性

这些属性的值会根据最近一次正则匹配的结果而有所变化

这些属性都有两种访问方式,一种是长属性,一种是短属性

长属性                    短属性                              内容

input                         $_                        最近一次匹配的字符串

lastMatch                 $&                            最近一次的匹配项

lastParen                  $+                        最近一次的匹配的捕获组

leftContext                $`                            lastMatch之前的文本

multiline                    $*                     是否所有表达式都是多行模式(该属性已废除)

rightContext              $'                            lastMatch之后的文本

PS. 对于短属性中无效的ECMA字符需要使用中括号来访问 如 RegExp["$`"]

除此而外就算test方法只返回 Boolean 其他的相应属性也会在上面的属性获取到

PS. $1~$9分别对应9个捕获组

Js中正则的局限性

JS中的正则虽然比较完备,但是仍缺少一些语言(Perl)所支持的高级正则表达式的特性

1.向后查找

2.交集并集

3.原子组

4.命名捕获组

5.s单行  x无间隔 模式

6.条件匹配

7.正则表达式注释

以上就是JS中正则的部分,详情见MDN

即便如此,JS中的正则对象还是能够满足我们平时绝大部分的匹配任务

Javascript高级编程学习笔记(15)—— 引用类型(4)RegExp类型的更多相关文章

  1. Javascript高级编程学习笔记(18)—— 引用类型(7)单体内置对象

    什么是内置对象呢? js高级程序设计中给出的定义为:由ES规定不依赖于宿主环境的对象,这些对象在JS执行前就已经存在 前面我们介绍的引用类型都是内置对象 除了这些对象外ECMA还规定了两个单体内置对象 ...

  2. Javascript高级编程学习笔记(17)—— 引用类型(6)基本包装类

    基本包装类 基本包装类这个概念或许有的小伙伴没有听说过 但是小伙伴们有没有想过,为什么基本数据类型的实例也有方法呢? 其实这些方法都来自基本包装类型 这是JS为了方便操作基础数据类型而创建的特殊引用类 ...

  3. Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型

    JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引 ...

  4. Javascript高级编程学习笔记(14)—— 引用类型(3)Date类型

    除了前两天介绍的Object.Array类型,Date应该就是JS中最常用的引用类型了 先介绍一下Date类型,该类型使用在Java的 java.until.Date 类的基础上构建的 使用UTC 1 ...

  5. Javascript高级编程学习笔记(13)—— 引用类型(2)Array类型

    除了Object类型之外ECMA中最常用的引用类型可能就是Array类型了 并且ECMA中的数组类型和其他大多数编程语言的数组类型存在着很大的区别 今天就介绍一下JS中的Array的特别之处 区别 1 ...

  6. Javascript高级编程学习笔记(12)—— 引用类型(1)Object类型

    前面的文章中我们知道JS中的值分为两种类型 基础类型的值和引用类型的值 基础类型的值我已经大概介绍了一下,今天开始后面几天我会为大家介绍一下引用类型的值 Object类型 对象是引用类型的值的实例,在 ...

  7. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  8. Javascript高级编程学习笔记(23)—— 函数表达式(1)递归

    前面的文章中,我在介绍JS中引用类型的时候提过,JS中函数有两种定义方式 第一种是声明函数,即使用function关键字来声明 第二种就是使用函数表达式,将函数以表达式的形式赋值给一个变量,这个变量就 ...

  9. Javascript高级编程学习笔记(8)—— 变量

    日常更新~~ 变量 所有的编程语言中,变量都是赋予语言灵活性的根本所在. 那么JS中的变量又有那些与众不同的地方呢.? 按照ECMA-262的定义,JS的变量和其他编程语言的变量有很大的区别 其松散类 ...

随机推荐

  1. python 打开浏览器的方法 Python打开默认浏览器

    一.python 打开浏览器的方法: . startfile方法(打开指定浏览器) import os os.startfile("C:\Program Files\internet exp ...

  2. API Test WebApiTestClient工具安装及使用

    一.guget安装: 1.解决方案右键-管理解决方案的nuget程序包打开如下图: 搜索WebApiTestClient,然后选择查询出的项目,右边点击安装即可:   2.安装会有如下图提示: 确定即 ...

  3. Python 的 14 张思维导图汇总

    本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章). 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典 ...

  4. WIN10 安装 ReportBuilder3.msi 提示需要 .NET Framework 4.5

    win+r键调出运行窗口输入regedit打开注册表,找到HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client ...

  5. dotNet程序员的Java爬坑之旅(二)

    囉里囉唆的寫了一大堆,最後還是全刪除了.哎~ 言歸正傳,最近因爲發生了很多事情,所以更新的有嗲晚了,最近也一直在學習,但是感覺效率什麽的不是很高,這是不對的,反思一下,從這篇博文開始,打起精神吧. M ...

  6. idea实现热部署并且开启自动编译

    [注]本文转自https://blog.csdn.net/z15732621582/article/details/79439359博文,如有冒犯,请联系博主: 问题描述: 最近在调试代码并进行本地测 ...

  7. sqlserv 配置 CLR

    转载地址:http://www.cnblogs.com/Brambling/p/8000911.html   //clr 配置 https://docs.microsoft.com/zh-cn/sql ...

  8. 编译安装php5.6

    sudo yum -y install curl-devel  bzip2 bzip2-devel libxml2  libxml2-devel  libjpeg libpng freetype li ...

  9. 【机器学习】异常检测算法(I)

    在给定的数据集,我们假设数据是正常的 ,现在需要知道新给的数据Xtest中不属于该组数据的几率p(X). 异常检测主要用来识别欺骗,例如通过之前的数据来识别新一次的数据是否存在异常,比如根据一个用户以 ...

  10. SQL: Cannot create JDBC driver of class '' for connect URL

    使用数据库数据源的web 项目,发布后,访问数据库500报错: 浏览器端: 控制台: 数据库连接池在不启动Tomcat的情况下,测试类通过,没有问题. 一旦在服务器发布,就会出现问题,考虑是Tomca ...