Javascript高级编程学习笔记(15)—— 引用类型(4)RegExp类型
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类型的更多相关文章
- Javascript高级编程学习笔记(18)—— 引用类型(7)单体内置对象
什么是内置对象呢? js高级程序设计中给出的定义为:由ES规定不依赖于宿主环境的对象,这些对象在JS执行前就已经存在 前面我们介绍的引用类型都是内置对象 除了这些对象外ECMA还规定了两个单体内置对象 ...
- Javascript高级编程学习笔记(17)—— 引用类型(6)基本包装类
基本包装类 基本包装类这个概念或许有的小伙伴没有听说过 但是小伙伴们有没有想过,为什么基本数据类型的实例也有方法呢? 其实这些方法都来自基本包装类型 这是JS为了方便操作基础数据类型而创建的特殊引用类 ...
- Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型
JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引 ...
- Javascript高级编程学习笔记(14)—— 引用类型(3)Date类型
除了前两天介绍的Object.Array类型,Date应该就是JS中最常用的引用类型了 先介绍一下Date类型,该类型使用在Java的 java.until.Date 类的基础上构建的 使用UTC 1 ...
- Javascript高级编程学习笔记(13)—— 引用类型(2)Array类型
除了Object类型之外ECMA中最常用的引用类型可能就是Array类型了 并且ECMA中的数组类型和其他大多数编程语言的数组类型存在着很大的区别 今天就介绍一下JS中的Array的特别之处 区别 1 ...
- Javascript高级编程学习笔记(12)—— 引用类型(1)Object类型
前面的文章中我们知道JS中的值分为两种类型 基础类型的值和引用类型的值 基础类型的值我已经大概介绍了一下,今天开始后面几天我会为大家介绍一下引用类型的值 Object类型 对象是引用类型的值的实例,在 ...
- Javascript高级编程学习笔记(3)—— JS中的数据类型(1)
前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...
- Javascript高级编程学习笔记(23)—— 函数表达式(1)递归
前面的文章中,我在介绍JS中引用类型的时候提过,JS中函数有两种定义方式 第一种是声明函数,即使用function关键字来声明 第二种就是使用函数表达式,将函数以表达式的形式赋值给一个变量,这个变量就 ...
- Javascript高级编程学习笔记(8)—— 变量
日常更新~~ 变量 所有的编程语言中,变量都是赋予语言灵活性的根本所在. 那么JS中的变量又有那些与众不同的地方呢.? 按照ECMA-262的定义,JS的变量和其他编程语言的变量有很大的区别 其松散类 ...
随机推荐
- windows server 2012 远程桌面不好使
下面的文章里讲的比较详细 http://www.hfkehu.cn/thread-4382-1-1.html 我遇到的问题是第一种,因为是刚装的机器,刚连上网时,选择如下设置时,因为鼠标一点别的地方, ...
- linux下搭建Jenkins环境
前提:Tomcat.jdk已安装并配置成功,具体安装和配置可参考我的其他随笔,在此不再详述 1.官网下载Jenkins最新war包,jenkins.war 2.进入Tomcat安装目录,创建Jenki ...
- APP支付(.NET版)
---恢复内容开始--- APP支付(.NET版) 一. 支付宝支付 1. 有一个支付账号,在蚂蚁金服开放平台中登录账号→选择“管理中心”→在“开发者中心”下选择“网页&移动应用”→然后按 ...
- mysql操作数据表中的记录1
一.插入记录INSERT mysql> create TABLE users( -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMEN ...
- weblogic中配置数据源
Weblogic数据源配置 一.配置数据源 1.点击数据源,进入数据源配置页面,点击新建后选择一般数据源 2.输入名称和jndi名称(两个输入一样即可)后点击下一步 3.选择驱动后点击下一步 4.输入 ...
- spring.boot 无法加载oracle驱动的可能原因
.找到本地oracle安装目录下的ojdbc6.jar包,为了方便起见,复制到某盘的根目录(如F盘根目录),在cmd下进入F盘根目录(也就是ojdbc.jar复制的目录),同时我们需要查看ojdbc的 ...
- 2-1 如何抓不同的接口(手机抓包,web网页抓包)
举个例子,一个测试和安卓的对话. 测试:Android你这里有个bug Android:这是服务端的bug 测试:是你这里显示的不对 Android:你去看服务端返回数据,他不对,你会不会测试. 从这 ...
- IDEA高效运用技巧
windows: //快捷鍵 1.项目之间的切换快捷键:Ctrl+Alt+[]. 2.文件之间切换快捷键:Ctrl+Alt+左右箭头. 3.返回到上一次修改的地方:Ctrl+Q. 4.查找打开过的文件 ...
- python数据结构(二)------元组
元组是不可变序列,因此,元组的操作非常简单,本文就简单介绍一下,并解释下元组存在的意义: 2.2.1 元组的创建 2.2.2 tuple函数 2.2.3 基本元组操作 2.2.4 元组存在的意义 2. ...
- VB编程中的“Abs”是什么意思?
c = Val(Text1.Text) '将Text1中的值赋给cIf c = Abs(a - b) Then 'Abs(a - b)是a和b间的差(正数),判断c是否等于该差值f = f + 10 ...