JScript中正则表达函数的说明与应用

作为模式匹配下文本替换、搜索、提取的强有力工具,正则表达式(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>

(0)

相关推荐

  • JScript中正则表达函数的说明与应用

    作为模式匹配下文本替换.搜索.提取的强有力工具,正则表达式(Regular Expression)的应用已经从unix平台逐渐渗入到网络开发中了,作为服务器端/客户端的脚本开发语言JScript,正越来越多将正则表达式应用融入其中,以弥补自身在文本上处理能力的不足.在此,我们以JScript5.5版本为例,对其中的正则表达式的应用作一个概述. 首先我们需要区分JScript中关于正则表达式的两个对象:Regular Expression对象和RegExp对象. 前者仅包含一个特定的正则表达式实例

  • php中正则替换函数ereg_replace用法实例

    本文实例讲述了php中正则替换函数ereg_replace用法.分享给大家供大家参考.具体如下: 下面的实例是利用php 正则替换函数 ereg_replace来把指定的字符替换成我想需要的字符实例,代码如下: 复制代码 代码如下: $num = 'www.jb51.net'; $string = "this string has four words. <br>"; $string = ereg_replace ('four', $num, $string); echo

  • JScript中正则表达式用法详解

    呵呵,先罗嗦几句,去年用C#做了一个语法高亮的小东西,根据配制文件中的信息把所给代码格式化成HTML,使它能在网页上显示出和编辑器里一样的语法元素高亮的效果以及支持代码折叠.没错,就是和博客园上看到的类似啦.因为我当时使用的是MSN Space,它没有提供这项功能,只好自己写一个咯. 我使用的是C#进行编写,起初使用的是超级繁琐的for,while,switch,if等基本语句来判断关键字等等,大家莫笑话,本人愚笨当时还不知道正则表达式是何物,所以只能用这种土办法了,当然土办法还是有效果的,只是

  • Python正则表达re模块之findall()函数详解

    一.re.findall函数介绍 它在re.py中有定义: def findall(pattern, string, flags=0): """Return a list of all non-overlapping matches in the string. If one or more capturing groups are present in the pattern, return a list of groups; this will be a list of

  • python正则表达中的re库常用方法总结

    元字符 : 预定义字符集: 我进行组合一些复杂的正则表达式的时候是为了快捷去晚上找一些现成的模式,然后再自己进行修改,变成符合自己需要的一些正则表达式. import re # 正则表达式中的一些使用的符号 # 匹配出现符合条件的 0 次的或者是 多次 str1 = 'qwertyuio1ui3oo467j398k' # 关键词: * 下面的句子就是进行匹配 零次 或者是 多次(多个字符) 符合是数字的意思 pattern = re.compile(r'\d*') res = re.findal

  • Python3中正则模块re.compile、re.match及re.search函数用法详解

    本文实例讲述了Python3中正则模块re.compile.re.match及re.search函数用法.分享给大家供大家参考,具体如下: re模块 re.compile.re.match. re.search re 模块官方说明文档 正则匹配的时候,第一个字符是 r,表示 raw string 原生字符,意在声明字符串中间的特殊字符不用转义. 比如表示 '\n',可以写 r'\n',或者不适用原生字符 '\n'. 推荐使用 re.match re.compile() 函数 编译正则表达式模式,

  • javascript中的replace函数(带注释demo)

    javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此机会,好好巩固一下相关知识点. 1.初识replace 在js中有两个replace函数 一个是location.replace(url) 跳转到一个新的url 一个string.replace("xx","yy") 替换字符串 返回一个新的字符串,该方法并不改变字符串

  • asp中在JScript中使用RecordSet对象的GetRows

    写ASP程序时,一般情况总是使用的VBScript,不过也不只是这一种选择,也可以用JScript.但在用JScript作为ASP的语言时,比用VBScript有一些小小的不方便,比如RecordSet的GetRows方法. 在ASP中操作数据库,一般都要用到RecordSet对象,如果注重程序效率的话,可能就会用到RecordSet对象的GetRows方法,把记录集对象转换成数组,而操作数组在速度上将比用RecordSet对象的MoveNext方法快很多,而且可以在取出数组后尽早释放Recor

  • js正则表达exec与match的区别说明

    以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用. 最近开发遇到一些需要使用正则表达式,顺便研究一下 正则表达式对象有两个定义方式:: 1.第一种定义: new RegExp(pattern, attributes);如var reg = new RegExp("abc","g") 其中pattern为表示表达式内容,如上表示匹配abc attributes:g,全局匹配,i不区分大小写,m执行多行匹配,

  • PHP正则替换函数preg_replace和preg_replace_callback使用总结

    在编写PHP模板引擎工具类时,以前常用的一个正则替换函数为 preg_replace(),加上正则修饰符 /e,就能够执行强大的回调函数,实现模板引擎编译(其实就是字符串替换). 详情介绍参考博文:PHP函数preg_replace() 正则替换所有符合条件的字符串 应用举例如下: 复制代码 代码如下: <?php /**  * 模板解析类  */ class Template { public function compile($template) { // if逻辑   $template

随机推荐