5.4.3 RegExp构造函数属性
2024-10-11 02:01:29
RegExp构造函数包含一些属性(这些属性在其他语言中被看成是静态属性)。这些属性适用于作用域中的所有正则表达式,并且基于所执行的最近一次正则表达式操作而变化。关于这些属性的另一个独特之处,就是可以通过两种方式访问他们。换句话说,这些属性分别有一个长属性名和一个短属性名(Opera是例外,它不支持短属性名)。下表列出了RegExp构造函数的属性。
长属性名 | 短属性名 | 说明 |
input | $_ | 最近一次要匹配的字符串。Opera未实现此属性 |
lastMatch | $& | 最近一次的匹配性。 Opera未实现此属性 |
lastParen | $+ | 最近一次匹配的捕获组。 Opera未实现此属性 |
leftContext | $` | input字符串中lastMatch之前的文本 |
multiline | $* | 布尔值,表示是否所有表达式都使用多行模式。IE和Opera未实现此属性 |
rightContext | $· | input字符串中lastMatch之后的文本 |
使用这些属性可以从exec()或text()执行的操作中提取出更具体的信息。看例子:
- var text="this has been a short summer";
- var pattern=/(.)hort/g;
- /*
- *注意:Opera不支持input、lastMatch、lastParen和multiline属性
- *IE 不支持multiline属性
- */
- if(pattern.test(text))
- {
- alert(RegExp.input); // this has been a short summer
- alert(RegExp.leftContext); //this has been a
- alert(RegExp.rightContext); //summer
- alert(RegExp.lastMatch); //short
- alert(RegExp.lastParen); //s
- alert(RegExp.multiline); //false
- }
复制代码
以上代码创建了一个模式,匹配任何一个字符串后hort,而且把第一个字符放在了一个捕获组中。
RegExp构造函数的各个属性返回了下列值:
- input返回了原始字符串。
- leftContext属性返回了单词short之前的字符串,而rightContext则返回了short之后的字符串。
- lastMatch属性返回最近一次与整个正则表达式匹配的字符串,返回short。
- lastParen属性返回最近一次匹配的捕获组,即例子中的s。
如上所示,例子中使用的长属性名都可以用对应的短属性名来代替。只不过,由于这些短属性名大都不是有效的ECMAScript标识符,因此必须通过方括号语法来访问他们,如下面例子:
- var text="this has been a short summer";
- var pattern=/(.)hort/g;
- /*
- *注意:Opera不支持input、lastMatch、lastParen和multiline属性
- *IE 不支持multiline属性
- */
- if(pattern.test(text))
- {
- alert(RegExp.$_); // this has been a short summer
- alert(RegExp.["$ `"]); //this has been a $和`之间不能有空格,由于编辑器的原因才不得不使用空格分割
- alert(RegExp.["$·"]); //summer
- alert(RegExp.["$ &"]); //short $和&之间不能有空格,由于编辑器的原因才不得不使用空格分割
- alert(RegExp.["$+"]); //s
- alert(RegExp.["$*"]); //false
- }
复制代码
除了上面介绍的几个属性以外,还有多达9个用于存储捕获组的构造函数属性。访问这些属性的语法是RegExp.$1、RegExp.$2、...、RegExp.$9,分别用于存储第一个、第二个、...、第九个匹配的捕获组。在调用exec()或text()方法时,这些属性会被自动填充。然后,我们就可以像下面这样来使用它们。
- var text="this has been a short summer";
- var pattern=/(..)or(.)/g;
- if(pattern.test(text))
- {
- alert(RegExp.$1);//sh
- alert(RegExp.$2);//t
- }
复制代码
这里创建了一个包含两个捕获组的模式,并用该模式测试了一个字符串。即使test()方法只返回一个布尔值,但RegExp构造函数的属性$1和$2也会被匹配相应捕获组的字符串自动填充。
注:我是小小白,欢迎各位大神指出文中不对的地方^_^~~
最新文章
- [调整] Firemonkey iOS 原生 Edit 透明框, 改变框色
- WIN8 浏览器排版不兼容问题
- Android布局_表格布局TableLayout
- 转-Android微信支付
- 关于JFace中的向导式对话框(WizardDialog类)
- Android与JS混编(js调用android相机)
- 电信光纤猫 f412超级密码
- poj1083 思考题
- shell-逐行读取文件
- 机器学习:python中如何使用朴素贝叶斯算法
- Microsoft SQL server2017初次安装与使用记录
- 记一个常见的ms sql server中取第N条记录的方法
- 在线图片上传、预览、裁切、放大、缩小之 cropbox.js 的应用
- css中input框不可点击+首行缩进
- js事件驱动函数
- maven工程的多环境配置方案(profile)
- 如何使用socket进行java网络编程(二)
- 《CDN 之我见》原理篇——CDN的由来与调度
- linux系统下单网卡绑定多个IP地址方法
- xhprof使用
热门文章
- #include <;thread>;
- 怎样通过css的media属性,适配不同分辨率的终端设备?
- [置顶] android 自定义圆角ImageView以及锯齿的处理
- SQL Server 数据库DML触发器 【一】
- mysql的触发器
- wecenter—开启CURL扩展,让服务器支持PHP curl函数(远程采集)
- poj 1949 Chores 最长路
- 修改Eclipse的WorkSpace保持数[转载]
- D3.js学习记录【转】【新】
- tpopela/vips_java