首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> Shell教程
jscript中正则表达式用法详解(附例子:jscript做语法加亮显示) _javascript教程
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

    呵呵,先罗嗦几句,去年用C#做了一个语法高亮的小东西,根据配制文件中的信息把所给代码格式化成HTML,使它能在网页上显示出和编辑器里一样的语法元素高亮的效果以及支持代码折叠。没错,就是和博客园上看到的类似啦。因为我当时使用的是MSN Space,它没有提供这项功能,只好自己写一个咯。

    我使用的是C#进行编写,起初使用的是超级繁琐的for,while,switch,if等基本语句来判断关键字等等,大家莫笑话,本人愚笨当时还不知道正则表达式是何物,所以只能用这种土办法了,当然土办法还是有效果的,只是一个函数里冗长的代码,以后要维护起来恐怕是非常难的,心想别的软件不可能是这么写的吧,于是乎到google上搜索了一阵,找到了些语法高亮的代码和开源项目,开起来一看。。。。。晕,一个个都那么复杂,说实在我最不喜欢做的事就是看别人代码了,不是我自命不凡,实在看别人代码实在是很晕,除非是有非常详细的文档描述,要不然我瞄两眼就不想看了,顶多是看看别人接口怎么写的,然后猜测他内部怎么实现。

    虽然搜索来的东西没有多大帮助,不过还是让我知道了正则表达式这个东东,具体忘记哪里看到的了。当时就开始一边研究正则表达式一边改造偶那“破玩意儿”。接着没多久在博客园重新开博了,终于开用上博客园的语法加亮功能啦,于是自己写个代码HTML高亮显示的东东就失去了一个主要动力了。其次,用C#做的语法高亮模块,只能运行在服务器端,或者WinForm程序上,而我最终要获取的是HTML代码以显示在页面上,我认为还是客户端脚本最适合这项工作。只可惜自己对JS并不甚了解。。。后来这段时间又胡搞瞎搞别的去了,也没有再改进那个语法加亮模块了。

    昨天加班晚上加班回到家里,本来打算继续学习下UML见模,后来想起公司有一个模块需要能剔出数据库返回结果中的所有HTML标签,我便打开正则表达式工具RegexBuddy。结果RegexBuddy的帮助文档时看到了JScript使用正则表达式的简单教学,于是乎好奇心又起,打开UltraEdit-32开始写简单的JavaScript试验起来。

    我的试验过程这里就不多废话再复述了,因为很多地方是反复试验绕很多弯路的,这里就直接给出试验总结出来的JScript中正则的用法。

    废话完毕,下面进入正题!  

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

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

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

var myRegex = new RegExp("\\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.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·jsp设置页面过期-JSP教程,Jsp/Servlet
·用SqlDataAdapter更新数据库的方法介绍-.NET教程,数据库应用
·用java关闭IE窗口-JSP教程,Java技巧及代码
·ADO.NET 2.0 Feature Matrix-ASP教程,ASP应用
·Jsp & Servlet 会话控制-JSP教程,Jsp/Servlet
·xmlhttp 乱码 的解决方法 (UTF8,GB2312 编码 解码)-ASP教程,XML相关
·使用C#编写Ice应用程序-.NET教程,C#语言
·用PHP实现WEB动态网页静态-PHP教程,PHP应用
·DataGrid基于Access的快速分页法-.NET教程,数据库应用
·HTML文档中小meta的大作用-ASP教程,XML相关
最新文章
·photoshop打造数码照片“像素块”特效_photoshop教程
·css中如何正确的使用id和class_css教程
·保证让新手轻松月挣500以上_网赚技巧
·记住10个关键词让你作一名成功的站长_站长心得
·对新人站长得一些善意得提醒_站长心得
·在windows vista中安装telnet客户端_windows vista
·怎样提高你的google adsense收入_站长心得
·googleadsense新手指南及常见问题整理_google推广
·高网站访问量的必胜之道:访google adwords经理(上)_google推广
·成功经验谈:运营blog的21个具体方法_网络编辑
相关主题
  • jscript中值类型的封箱与拆箱_javascript教程
  • jscript错误代码及相应解释-ASP教程,ASP应用
  • JScript.Net 之 SqlDataReader读取数据-.NET教程,数据库应用
  • JScript中正则表达函数的说明与应用-ASP教程,正则表达式
  • jscript错误代码及相应解释大全-ASP教程,脚本编码
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭