JScript的正则表达式对象RegExp。

news/2024/7/24 6:12:08 标签: 正则表达式, 软件测试

首相讲讲JScript的正则表达式对象RegExp。

JScript中提供正则表达式操作的类名为RegExp,可以用两种方式实例化RegExp类型的对象。

方法一,构造函数实例化:

var myRegex = new RegExp("file://w/+", "igm ");
//\w+为实际正则表达式,注意第一个\为转义之用,igm分别表示忽略大小写,全局搜索,多行搜索,这个后面会解释
方法二,直接赋值法:

var myRegex = /\w+/igm;
//效果与上一个语句一样,只是这里不需要用转移字符,原正则表达式是什么样子就是什么样子,igm就和前面例子的igm作用一样
具体用什么方式看大家喜好了,个人觉得第二种方式写的正则比较好读些,RegexBuddy帮助文档也是推荐第二种方式。 RegExp对象包含以下一些操作:

exec(string str):执行正则表达式匹配,并返回匹配结果,根据MSDN给出的例子运行结果看,exec每次执行都是从上次直接的匹配结束位置开始,并且返回的值似乎是RerExp对象,而RegexBuddy给出的解释是返回一个数组,但是没有给出详细例子,我觉得还是根据试验结果为依据比较可靠。

compile(string regex, string flags):预编译正则表达式以使其运行更快,经过测试的确预先编译后效率有明显提升。regex参数为正则表达式,flags可以为以下3个值的组合: g – 全局搜索,我的试验结果是不加g标志就只能匹配第一个符合条件的字符串 i – 忽略大小写 m – 多行搜索,似乎默认已经是多行搜索了

test(string str):如果str匹配正则表达式返回true,否则返回false,这个类似string对象的match方法

RegExp对象包含以下一些属性:

index:字符串中第一个匹配表达式的位置,初始为-1
input:正则表达式的匹配目标,注意是只读的
lastIndex:下一个匹配表达式的位置,原话是(Returns the character position where the next match begins in a searched string.)也不知道有没有翻译错,这个属性我没有用到。
lastMatch:最后一个匹配表达式的字符串
lastParen:最后一个匹配的子匹配串,比如正则表达式里有多个以()分组的匹配项,lastParen表示最后一组所匹配的结果
leftContext:从目标字符串的开头到last match的起始位置的所有字符。
rightContext:从last match的结束位置到整个目标字符串的结束位置的所有字符。
$1…$9:表示第n组匹配的结果,这个在正则表达式里有多个以()分组时有用

接下来讲讲,JScript中String对象与正则表达式有关的操作:

match(string regex):接受一个正则表达式,并返回该字符串是否与这个表达式匹配。
replace(srting regex, string str):将与正则表达式匹配的子字符串替换为str,这个函数看似简单,不过还隐藏着更高级用法哦,请看以下例子。
例子1:

var str1 = "A:My name is Peter!\nB:Hi Peter!";
str1 = str1.replace(/Peter/g,"Jack");
alert(str1);
这个例子很简单就是把字符串替换了,这则表达式的威力当然不只于此,如果你用的熟练,还能用它完成很多以往需要大量代码完成的工作。比如在代码关键字前后加上由于高亮显示的HTML标签。从前面例子看来似乎replace只能把匹配的文本替换成新的文本啊,怎么利用它在关键字前后插入标签呢?返过来想象,如果在替换时能利用匹配结果,那么事情不就好办了,只要将关键字替换为:标签头 + 关键字 + 标签尾 不就行了。

可是要如何在replace中使用正则表达式匹配的结果呢?

这时候我们就需要用到“匹配变量”了,匹配变量用于表示正则匹配的结果,以下是匹配变量的说明:
$& -- 表示全部匹配组匹配的结果,最后再啰嗦一次,匹配组就是正则表达式的()分组
$$ -- 表示$字符,因为匹配变量用掉了$字符,所以需要转义
$n -- 类似前面的$1…$9,表示第n组匹配的结果
$nn -- 很简单就是第nn组匹配的结果
$` -- 就是前面提到过的leftContext,比如abcdefg被匹配出了d那么abc就是它的leftContext了
$' -- 和上面符合很接近不要看错了!,这个就是rightContext了,举一反三,efg就是上面例子的rightContext了 那么现在我们要做到在关键字前后插入标签就很简单了:

var str1 = "A:My name is Peter!\nB:Hi Peter!";
str1 = str1.replace(/Peter/g, "<b>$&</b>");
alert(str1);
都0:39了。。。就写到这里吧。

正则工具软件下载(密码: regex):regex buddy 2.06.zip
我写的例子请看:JScript做语法加亮显示(代码精简)

一下是MSDN载抄的一些例子:

function matchDemo()
{
var s;
var re = new RegExp("d(b+)(d)","ig");
var str = "cdbBdbsbdbdz";
var arr = re.exec(str);
s = "$1 contains: " + RegExp.$1 + "\n";
s += "$2 contains: " + RegExp.$2 + "\n";
s += "$3 contains: " + RegExp.$3;
return(s);
}
function RegExpTest()
{
var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
if (ver >= 5.5){
var src = "The rain in Spain falls mainly in the plain.";
var re = /\w+/g;
var arr;
while ((arr = re.exec(src)) != null)
print(arr.index + "-" + arr.lastIndex + "\t" + arr);
}
else{
alert("You need a newer version of JScript for this to work");
}
}

function matchDemo()
{
var s; //Declare variable.
var re = new RegExp("d(b+)(d)","ig"); //Regular expression pattern.
var str = "cdbBdbsbdbdz"; //String to be searched.
var arr = re.exec(str); //Perform the search.
s = "$1 returns: " + RegExp.$1 + "\n";
s += "$2 returns: " + RegExp.$2 + "\n";
s += "$3 returns: " + RegExp.$3 + "\n";
s += "input returns : " + RegExp.input + "\n";
s += "lastMatch returns: " + RegExp.lastMatch + "\n";
s += "leftContext returns: " + RegExp.leftContext + "\n";
s += "rightContext returns: " + RegExp.rightContext + "\n";
s += "lastParen returns: " + RegExp.lastParen + "\n";
return(s); //Return results.
}
document.write(matchDemo());


http://www.niftyadmin.cn/n/1128758.html

相关文章

Mozilla公布了第二批开源支持计划的捐款对象

2019独角兽企业重金招聘Python工程师标准>>> Mozilla公布了第二批开源支持计划的捐款对象&#xff1a;总金额38.5万美元&#xff0c;其中最大的受益者是Tor项目。Tor匿名项目获得15.25万美元&#xff0c;默认使用Tor的Live操作系统Tails获得7.7万美元&#xff0c;自…

InstallShield安装包卸载-完美卸载

在前面的日志里面介绍了在卸载的时候删除整个安装文件夹的方式。可是当遇到程序生成的文件不是在同一个文件夹下&#xff0c;有时甚至是用户自己定义的文件夹路径&#xff0c;这个时候我们卸载的时候是没有将用户自己定义的文件夹给删除掉的。所以今天会介绍怎么用getprofstrin…

盘点五大国产商业智能BI工具

离9月15日已不足半月&#xff0c;由于美国的制裁&#xff0c;在此日之后&#xff0c;华为的高端麒麟芯片系列将无法制造。我们对此愤恨不已&#xff0c;却又无可奈何&#xff0c;因为国内并不掌握相关的高端制造技术。目前&#xff0c;在一些高端行业&#xff0c;我们国家确实比…

js 获取鼠标点击坐标

if (document.all) { x event.screenX; y event.screenY; } else { x evnt.screenX; y evnt.screenX; }

用Matlab与C++程序生成的数据文件绘制sin函数

软件&#xff1a; MatlabR2014a CodeBlock1.新建个工程2.输入程序&#xff0c;求得坐标并保存到txt文件中3.用MATLAB建个M文件4.输入绘图代码&#xff0c;如图5.点击运行&#xff0c;M文件保存在新建工程所在的文件夹下6.绘图完成7.如果想把图像以其他格式保存&#xff0c;则点…

python+selenium 环境搭建以及元素定位

在给公司同事给培训了WEB自动化框架&#xff0c;现在和大家分享交流下 转载于:https://www.cnblogs.com/tinghai8/p/5487363.html

2008年教育部拟对以下九个成语解释的纠正:

2008年教育部拟对以下九个成语解释的纠正: 一.知书达礼&#xff1a;仅知道书本知识是不够的&#xff0c;还要学会送礼&#xff1b; 二.度日如年&#xff1a;日子非常好过&#xff0c;每天象过年一样&#xff1b; 三.杯水车薪&#xff1a;每天办公室喝喝茶&#xff0c;月底可以拿…

2801 LOL-盖伦的蹲草计划

2801 LOL-盖伦的蹲草计划 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description众所周知&#xff0c;LOL这款伟大的游戏&#xff0c;有个叫盖伦的英雄。他的伟大之处在于他特别喜欢蹲草丛阴人&#xff08;XL&#xff1a;蹲草阴人也算英雄&#xff1f…