JScript中正则表达式用法详解

  次阅读 作者:智能小宝 来源:互联网 2016-03-01 10:41 我要评论(0)

呵呵,先罗嗦几句,去年用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中使用正则表达式匹配的结果呢? 这时候我们就需要用到“匹配变量”了,匹配变量用于表示正则匹配的结果,以下是匹配变量的说明: $& -- 表示全部匹配组匹配的结果,最后再

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...