分享
 
 
 

转贴(csdn):JScript中正则表达函数的说明与应用

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

作为模式匹配下文本替换、搜索、提取的强有力工具,正则表达式(Regular Expression)的应用已经从unix平台逐渐渗入到网络开发中了,作为服务器端/客户端的脚本开发语言JScript,正越来越多将正则表达式应用融入其中,以弥补自身在文本上处理能力的不足。在此,我们以JScript5.5版本为例,对其中的正则表达式的应用作一个概述。

首先我们需要区分JScript中关于正则表达式的两个对象:Regular Expression对象和RegExp对象。

前者仅包含一个特定的正则表达式实例的信息,而后者通过一个全局变量的属性来反映最近模式匹配的特性。

前者在匹配前需要指定匹配模式,即创建一个Regular Expression对象的实例,而后可以把它传递给一个字符串方法,或是把一个字符串作为参数传递给这个Regular Expression实例的方法;而后者无需创建,它是一个固有的全局对象,每次成功匹配操作结果信息被保存在这个对象的属性中。

一、RegExp对象的属性:反应最近一次成功匹配的结果信息

input :保存执行匹配的字符串(被搜索的目标字符串)(>=IE4)

index :保存匹配的首字符的位置*>=IE4)

lastIndex :保存匹配的字符串的下一个字符的位置(>=IE4)

lastMatch($&) :保存匹配到的字符串(>=IE5.5)

lastParen($+) :保存匹配结果最后一个子匹配的内容(最后一个括号的匹配内容)(>=IE5.5)

leftContext($`) :保存目标字符串中匹配子字符串前的所有字符 (>=IE5.5)

rightContext($'):保存目标字符串中匹配子字符串后的所有字符 (>=IE5.5)

$1 - $9 :保存匹配中最开始的9个子匹配(即最开始的9个括号内的匹配结果)(>=IE4)

二、Regular Expression对象简介

1.Regular Expression对象定义

在脚本中使用正则表达式模式匹配,首先腰设定匹配模式,方法有如下两种

(1)rgExp=/pattern*/[flags*]

(2)rgExp=new RegExp("pattern",["flags"])

注意:

a.后者模式中的转义字符“\”需要用“\\”表示,用以抵消JS中转义字符"\"的意义,否则JS首先作为自己的转义概念来解释"\"后的字符。

b.flags标识有以下几个(至JScript 5.5版本)

g:设定当前匹配为全局模式

i:忽略匹配中的大小写检测

m:多行搜索模式

2.Regular Expression对象属性

(1)rgExp.lastIndex:匹配结果后面一个字符的位置,同RegExp.lastIndex

(2)rgExp.source:reExp对象的正则表达式匹配模式

3.Regular Expression对象方法

(1)rgExp.compile(pattern,[flags])

将rgExp转化为内部格式,以加快匹配的执行,这对于大量模式一致的匹配更有效

(2)rgExp.exec(str)

按照rgExp的匹配模式对str字符串进行匹配查找,当rgExp对象中设定了全局搜索模式(g),则匹配查找从RegExp对象lastIndex属性所指定的目标字符串位置开始;若没有设置全局搜索,则从目标字符串第一个字符开始搜索。若没有任何匹配发生,返回null。

需要注意的是该方法将匹配结果放在一个数组内返回,该数组有三个属性

input:包含目标字符串,同RegExp.index

index:匹配到的子字符串在目标字符串中的位置,同RegExp.index

lastIndex:匹配到的子字符串后面一个字符的位置,同RegExp.lastIndex

(3)rgExp.test(str)

返回布尔值来反映被查找的目标字符串str中是否存在符合匹配的模式。该方法不改变RegExp的属性

4.与正则表达式相关的方法

主要是指字符串对象中应用模式匹配的方法

(1)stringObj.match(rgExp)

根据rgExp对象的正则表达式模式查找字符串stringObj中的匹配字符项,将结果以数组形式返回。该数组有三个属性值,与exec方法返回的数组属性相同。若没有任何匹配,返回null。

需要注意的是,若rgExp对象未设定全局匹配模式,则数组0下标元素为匹配的整体内容,1~9包含了子匹配得到的字符。若设定了全局模式,则数组包含了搜索到的所有整体匹配项。

(2)stringObj.replace(rgExp, replaceText)

返回一个字符串,即将stringObj中符合rgExp模式匹配的字符串替换成replaceText后返回。需要注意的是stringObj本身并不因为替换操作而改变。若期望stringObj中所有符合正则表达式模式的字符串被替换,则在建立正则表达式模式时要设定为全局模式。

(3)stringObj.search(rgExp)

返回第一个匹配到的子字符串的位置

符号名词解释:

位置:表示子字符串与目标字符串首字符的偏移

reExp:表示一个Regular Expression对象实例

stringObj:表示一个字符串对象

pattern:正则表达式模式

flags:匹配操作的模式标识

在实际web程序开发中我们可以有针对性的使用正则表达式来达到我们字符串处理的要求

如下附上四个使用正则表达式的JScript例程,这些例子主要用来熟悉正则表达式的使用。

1.email地址有效性检测

<script language='JScript'>

function validateEmail(emailStr)

{

var re=/^[\w.-]+@([0-9a-z][\w-]+\.)+[a-z]{2,3}$/i;

//或 var re=new RegExp("^[\\w.-]+@([0-9a-z][\\w-]+\\.)+[a-z]{2,3}$","i");

if(re.test(emailStr))

{

alert("有效email地址!");

return true;

}

else

{

alert("无效email地址!");

return false;

}

}

</script>

2.字符串替换操作

<script language='JScript'>

var r, pattern, re;

var s = "The rain in Spain falls mainly in the plain falls.";

pattern = /falls/ig;

re = s.replace(re,'falling');

alert('s = ' + s + '\n' + 're = ' + re);

</script>

3.模式查找字符串

<script language='JScript'>

var index, pattern;

var str = "four for fall fell fallen fallsing fall falls waterfalls ";

pattern = /\bfalls\b/i;

index = str.search(pattern);

alert('The position of match is at ' + index);

</script>

3.正则表达式属性例程

<script language='JScript'>

function matchAttrib()

{

var s='';

var re = new RegExp("d(b+)(d)","ig");

var str = "cdbBbdbsbdbdz";

while((arr = re.exec(str))!=null)

{

s += "=======================================<br>";

s += "$1 returns: " + RegExp.$1 + "<br>";

s += "$2 returns: " + RegExp.$2 + "<br>";

s += "$3 returns: " + RegExp.$3 + "<br>";

s += "input returns : " + RegExp.input + "<br>";

s += "index returns : " + RegExp.index + "<br>";

s += "lastIndex returns : " + RegExp.lastIndex + "<br>";

s += "lastMatch returns: " + RegExp.lastMatch + "<br>";

s += "leftContext returns: " + RegExp.leftContext + "<br>";

s += "rightContext returns: " + RegExp.rightContext + "<br>";

s += "lastParen returns: " + RegExp.lastParen + "<br>";

s += "arr.index returns: " + arr.index + "<br>";

s += "arr.lastIndex returns: " + arr.lastIndex + "<br>";

s += "arr.input returns: " + arr.input + "<br>";

s += "re.lastIndex returns: " + re.lastIndex + "<br>";

s += "re.source returns: " + re.source + "<br>";

}

return(s); //Return results.

}

document.write(matchAttrib());

</script>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有