正则表达式对象和RegExp对象
正则表达式对象和RegExp对象
正则表达式对象保存用于查找字符串中的字符组合时的模式。创建正则表达式对象后,或者它被传递给字符串方法,或者字符串被传递给一个正则表达式方法。有关最近进行查找的信息被保存在 RegExp 对象中。
创建正则表达式对象有两种方法。如果预先知道要查找的字符串时,用语法1:
var regularexpression = /pattern/[switch]
当查找字符串经常变动或不知道时用语法2:
var regularexpression = new RegExp("pattern",["switch"])
pattern是要查找的字符串,在语法1中用斜杠括起来,而在语法2中有引号。switch是开关,有三种选择,"i" 表示忽略大小写,"g" 表示全文查找出现的所有pattern,"gi" 表示两者都要,即全文查找并忽略大小写。
执行查找
在创建了正则表达式对象后,要执行查找用exec方法,语法:
rgexp.exec(str)
rgexp是正则表达式对象,可以是变量名或文字。str是被查找的字符串。例如,
var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp";
var r = new RegExp("g", "i");
var a = r.exec(s);
document.write(a); //显示G
因为忽略大小写,执行搜索后第一个匹配的是G,所以变量a="G"。
exec方法查找的结果被放在一个数组中。如果 exec 方法没有找到匹配,则它返回 null。如果它找到一个或多个匹配,则exec 方法返回一个数组,并且更新 RegExp 对象,来反映查找结果。在RegExp 对象的属性 $1, ...$9 中保存最近的九个结果。无论何时产生一个成功的带插入语的匹配,$1...$9 属性的值都被修改,但是只有最近的九个可以被保存起来。
测试正则表达式模式
可以用test方法来测试正则表达式在被查字符串的中是否存在。语法
rgexp.test(str)
语法与exec方法一样。它返回一个Boolean值,如果存在就返回true,否则返回false。test 方法不修改RegExp对象中的信息。
RegExp对象和它的属性
RegExp对象用于保存对正则表达式模式查找的信息,这些信息保持在它的属性中。RegExp对象没有方法。一般语法是
RegExp.propertyname
propertyname 参数是RegExp对象的一个属性。RegExp对象有下列属性:
$1-$9 属性 返回九个在模式匹配期间找到的、最近保存的部分。只读。
RegExp.index 返回第一个成功匹配的字符串的开始位置。
RegExp.lastIndex 返回字符位置,它是被查找字符串中最后一次成功匹配的开始位置。
RegExp.input 返回执行查找的字符串。只读。
lastIndex 属性是基于零的,也就是说,第一个字符的索引是零。不论何时产生一个成功匹配,它的值都被修改。lastIndex 属性被RegExp 对象的exec 和test 方法,以及String 对象的match、replace、和 split 方法修改。
下面的规则应用于 lastIndex 的值:
- 如果还没有匹配,则 lastIndex 被设置为 -1.
- 如果 lastIndex 比字符串的长度大,则 test 和 exec 失败,并且 lastIndex 被设置为 -1。
- 如果 lastIndex 等于字符串的长度,且模式与空字符串匹配,则正则表达式匹配。否则,匹配失败并且 lastIndex 被重置为 -1。
- 否则,lastIndex 被设置为紧接最近的匹配的下一个位置。
例程1 下面的代码用来考察上述属性的内容。
function RegexpDemo(reg, str){
var re = new RegExp(reg ,"gi");
var a = re.exec(str);
var BR = "<br>";
if (re.test(str))
document.write ("找到的第一个匹配的字符串是" +a + BR);
document.write ("第一个匹配位置是" +RegExp.index+ BR);
document.write ("最后一个匹配位置是" +RegExp.lastIndex+ BR);
document.write ("被查找的文本是:" +BR +RegExp.input+ BR);
document.write ("$1=" + RegExp.$1);
};
var str = "The built-in objects are special because they are built into ASP pages and do not need to be created before you can use them in scripts.";
var reg = "(OBJECT)";
document.write ("查找" + reg + "<br>");
RegexpDemo(reg, str+str);
运行例程
说明 查找的字符串OBJECT加括号,$1有值。如果不加括号,$1是空串。什么道理? 我也不知道。
正则表达式对象的属性
正则表达式对象有两个属性属性。lastIndex属性指定索引,下一个匹配从该索引处开始。语法:
rgexp.lastIndex [= index]
请参照RegExp对象的lastIndex属性。
source属性返回正则表达式模式的文本的复本,只读。语法:
rgexp.source
下面的例子说明了source 属性的用法:
RegExp.input 是返回被查找的字符串,而source是返回要查找的字符串。
正则表达式对象的compile方法
正则表达式模式pattern 参数在使用前被编译为内部格式。对语法1 来说,pattern 在该脚本装载时被编译。对语法2 来说,pattern 在使用前,或调用compile方法时被编译。compile方法把pattern转换为内部格式,从而执行得更快。这使得在循环中可更有效地使用正则表达式。语法如下:
rgexp.compile(pattern)
下面的例子说明了compile 方法的用法:
代码注释
match是String对象的一个方法,其功能是使用正则表达式对象对字符串进行查找,并将结果作为数组返回。语法:
stringObj.match(rgExp)
match 方法与RegExp.exec 方法有些相似,将返回一个数组。该数组的元素0 包含最后匹配的字符,元素 1...n 包含与正则表达式中任何用插入符分开的子字符串匹配的内容。该方法将更新RegExp 对象的内容。
下面的示例演示了match方法的用法:
VBscript中的正则表达式
在VBscript中,正则表达式对象就是RegExp对象。RegExp对象有3个属性:
- Pattern 属性,设置或返回被搜索的正则表达式模式。
- Global 属性,指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。
- IgnoreCase 属性,指明模式搜索是否区分大小写。
RegExp对象有3种方法:
- object.Execute(string) 对指定的字符串执行正则表达式搜索。Execute方法返回一个 Matches 集合,其中包含了在string 中找到的每一个匹配的 Match 对象。如果未找到匹配,Execute 将返回空的 Matches 集合。
- object.Test(string) 对指定的字符串执行一次测试性搜索,只返回一个 Boolean值指示是否存在匹配。
- object.Replace(string1, string2) 替换在正则表达式中找到的文本。搜索string1,用string2替换。返回string1被替换后的字符串。
这里object是已定义的正则表达式,string是被搜索的文本。要查找的是用Pattern描述的正则表达式模式。
例程1 创建一个正则表达式,并演示替换方法。
Match对象和Matches集合
只能通过 RegExp 对象的Execute 方法来创建,该方法实际上返回了Match 对象的集合Matches。所有的Match 对象属性都是只读的。每个Match 对象提供了被正则表达式搜索找到的匹配字符串的开始位置、长度,字符串本身等信息,通过Match对象的属性供用户访问。
- FirstIndex 在搜索字符串中匹配的位置。
- Length 匹配字符串的长度。
- Value 找到的匹配字符串。
例程2 创建一个正则表达式,执行搜索,并显示每一个匹配的结果。
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = True
regEx.Global = True
Set Matches = regEx.Execute(strng)
For Each Match in Matches
RetStr = RetStr & "Match " & Match & " found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is "
RetStr = RetStr & Match.Value & "'." & "<br>"
Next
RegExpTest = RetStr
End Function
document.write (RegExpTest("is.", "IS1 is2 IS3 is4"))
运行例程2
两种语言正则表达式的用法对照表
VBscript的RegExp对象 | Javascript的正则表达式 |
IgnoreCase属性 | 创建语法中的开关switch ="i" |
Global属性 | 创建语法中的开关switch ="g" |
Pattern属性 | 创建语法中的Pattern参数 |
matchs对象集合 | 属性$1 - $9 |
Execute方法 | exec方法 |
Test方法 | test方法 |
Replace方法 | 没有对应方法,但有字符串对象的replace方法 |
没有对应的方法 | compile方法 |
没有对应的属性 | source属性 |
有许多用于正则表达式模式的特殊字符,这在两种语言中是一样的。详情见相关文章。
文 东方一峰 2002-12-27
URL:http://www.shps.cn/developweb/webSchool/VBJAVA/VBJjc016.htm
正则表达式对象和RegExp对象相关推荐
- Javascript中的内置对象:RegExp对象
一.定义RegExp RegExp对象用于存储检索模式.创建RegExp对象的检索模式如下: var myPattern=new RegExp(pattern,attributes); (1) 参数p ...
- JavaScript 基础(三) - Date对象,RegExp对象,Math对象,Window 对象,History 对象,Location 对象,DOM 节点...
Date对象 创建Date对象 //方法1:不指定参数var date_obj = new Date();alert(date_obj.toLocaleString())//方法2:参数为日期字符串v ...
- JavaScript 正则表达式(RegExp对象、属性、方法、String支持)
内容来源:JavaScript RegExp 对象参考手册 http://www.w3school.com.cn/js/jsref_obj_regexp.asp RegExp 对象 RegExp ...
- JavaScript学习笔记03【基础——对象(RegExp、Global)】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- ASP正则表达式对象 - New RegExp
<Execute 方法> 描述:对指定的字符串执行正则表达式搜索. 语法:object.Execute(string) Execute 方法的语法包括以下几个部分: object:必需的. ...
- 【JS】javascript正则表达式的基本使用(JavaScript RegExp 对象)
javascript正则表达式的基本使用(JavaScript RegExp 对象) 1. 正则表达式是什么? 2. 基本使用语法 2.1 正则表达式思维导图 2.2 定义正则表达式 2.2.1 普通 ...
- JavaScript学习(十三)---RegExp对象
目录 创建RegExp对象 1.使用RegExp的显式构造函数 2.使用RegExp的隐式构造函数,采用纯文本格式 RegExp对象的属性 静态属性: index属性: input属性: lastIn ...
- JavaScript标准库系列——RegExp对象(三)
目录 导语 1.理解正则表达式 2.模式的规则 3.字符串和正则实例的属性和方法 4.检索实例 5. 小结 导语 正则表达式是处理字符串的一门艺术手法,应用场景经常出现在表单验证部分: JavaScr ...
- JavaScript强化教程—— RegExp 对象
为什么80%的码农都做不了架构师?>>> 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 --RegExp 对象 RegExp ...
最新文章
- python【蓝桥杯vip练习题库】ADV-313字符串顺序比较
- linux找不到动态链接库 .so文件的解决方法(转自:http://www.cnblogs.com/xudong-bupt/p/3698294.html)
- TeamCity : 自动触发 Build
- android ipc 多个客户端,Android IPC之AIDL进阶篇
- java 解决时间相减问题
- 前端学习(3062):vue+element今日头条管理-总页码处理
- 美团外卖Android平台化的复用实践
- Feign 超时设置
- 科普:为什么 String hashCode 方法选择数字31作为乘子
- Unity URP 内置的 ParticlesLit.shader 中的 fallback 拼写错误,导致 fallback 找不到 SimpleLit,改为 Simple Lit即可
- 【博弈论】耶鲁大学公开课--博弈论Problem Set 1--Solution
- 如何确定硕士毕业论文选题?
- [copypaste]各种表示法
- 磨刀不误砍柴工——VS生成事件
- 6种电脑录屏工具,免费在线,桌面端Windows和Mac均适用
- LaTex - PPT 换页动态效果(亲测有效)
- OpenBlock Desktop v2.3.1积木编程
- linux 问题-——退出vi编辑器 wq失效
- 时序逻辑中的锁存器、触发器、寄存器
- SpringBoot初探
热门文章
- 25-windows10中PS/2键盘失灵导致按键无效、键盘按下一次出现多次----解决(排除硬件问题、鼠标可使用的情况)
- evaluate函数在python_Pandas探索之高性能函数eval和query解析
- 利用github作iOS企业分发App
- Python+AI给老照片上色
- jQuery实现3D立方体翻转插件
- js -- 内联函数
- python提取mp3专辑图片
- Vue本地应用(通过Vue实现常见网页效果)
- linux 网站流量日志系统,网站日志分析_linux network的技术博客_51CTO博客
- python重启路由器_linux下的python里面如何用相关的网络模块来重启tp-link路由器?...