侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

前端  /  管理员 发布于 4年前   321

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


  • 上一条:
    JS中的正则表达式及pattern的注意事项
    下一条:
    Jquery、Ajax、Struts2完成定时刷新的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客