这段时间项目上都流行起AJAX,而JavaScript就成为了AJAX的核心部分。以前只是用JavaScript实现一下页面的特效而已,而现在使用起来发现它的功能而不小。好了,还是讲今天的正题吧,关于AJAX我肯定会单独发时间和发篇幅来描述它的。
  在前面我已经讲述了关于正则表达式的概念和基本语法,现在就研究一下正则表达式在JavaScript中应用。

使用RegExp对象执行字符串模式匹配
  RegExp是JavaScript中的正则表达式对象,利用它可以完成字符串匹配的各种操作。获得一个RegExp对象可以用两种方式:
  var objRegExp = /pattern*/[flag]
  //或者
  var objRegExp = newRegExp("pattern" [, "flag"]);
  其中pattern是要匹配的模式,flag表示搜索模式,有两个可选参数,分别是g和i。g表示全局搜索,在后面介绍的replace方法中非常有用;i表示忽略大小写,默认情况下是大小写敏感的。
  例如:
  /jimek/ig
  new RegExp("jimek","ig");
  都表示全局匹配文本中的"jimek"单词,并且忽略大小写。
①    RegExp的方法(如下表)

   正则表达式对象 RegExp 的方法

 

 

compile(pattern,flags)

将正则表达式转换为内部格式,对于批量匹配可以提高匹配效率

exec(str)

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

该方法将匹配结果放在一个数组内返回,该数组由3个属性:

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

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

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

test(str)

判断str是否符合指定的模式,返回一个布尔变量,true或者false,需要注意,这个方法不会改变RegExp的属性值

  在执行完字符串匹配后,匹配结果会以RegExp静态属性的方式提供给脚本程序,每次执行exec都会改变这些静态属性。
②    RegExp的静态属性

   正则表达式对象RegExp的静态属性

     

 

RegExp.input

保存被搜索的字符串

RegExp.index

保存匹配的首字符的位置

RegExp.lastIndex

保存匹配的字符串下一个字符的位置

RegExp.lastMatch

保存匹配到的字符串

RegExp.lastParen

保存最后一个被匹配的字符串(最后一个括号的内容)

RegExp.leftContext

保存匹配字符串左边的内容

RegExp.rightContext

保存匹配字符串右边的内容

RegExp.$1$9

保存最开始的9个子匹配(括号中的内容)

  由此可见,所有的匹配结果都保存在同一个位置,当执行exec方法后,这些静态属性就会改变。因此,必须确保在执行完匹配后立即去使用匹配结果,或将它们保存到另外的变量中,而不再使用RegExp的这些属性。

提取子字符串
  在匹配模式中,可以用小括号将子模式括起来,以获取子匹配的内容,这些匹配的结果被存储在RegExp.$1$9中。例如,对于xml片断:
  <author>jimek</author>
  如果要使用正则表达式获取其中的作者:jimek,可以这样实现:
  <script language="JavaScript" type="text/javascript">
  <!--
     var strXml = "<author>jimek</author>";
     var regExp = /<author>(\w*)</author>/;
     regExp.exec(strXml);
     var author = RegExp.$1;
     alert(author);
  //-->
  </script>
  当需要提取多个子模式时,可以使用RegExp.$1$9依次获取得到的字符串。如果需要得到的子模式不只9个,也可以使用exec返回的数组来获取子字符串,返回数组的长度为子模式的个数加1,其中数组索引为0的元素表示被搜索的字符串,其后的元素依次对应于模式中的括号。例如上面的例子也可以用下面的代码实现:
  <script language="JavaScript" type="text/javascript">
  <!--
     var strXml = "<author>jimek</author>";
     var regExp = /<author>(\w*)</author>/;
     var arr = regExp.exec(strXml);
     var author = arr[1];
     alert(author);
  //-->
  </script>

与字符串相关的操作
  在字符串相关的操作时,有3个方法的参数需要用到正则表达式
1.  string.search(regularExpression)
  其中string是要处理的字符串,regularExpression是匹配模式。该方法在string中查找指定的模式,如果找到,则返回它的第一个字符的索引位置,否则返回-1。例如:
  "<author>jimek</author>".search(/jimek/);
  显示结果为8。与indexOf()方法不同,该方法接收的是一个正则表达式,而indexOf只能接收一个字符串。但两者的行为是类似的。
2.  string.replace(regularExpression,replaceString)
  其中regularExpression是要查找的模式,replaceString是要替换匹配模式的字符串。regularExpression也可以用普通字符串,但那样只能替换第一个出现的匹配,之后的匹配则被忽略。使用正则表达式后可以使用全局模式来实现整个替换。替换后原有字符串不发生变化,而是返回一个新的字符串。
  例如:在实际开发中经常要删除一段文本中HTML标记,以获取纯文本,可以使用如下代码实现:
  <script language="JavaScript" type="text/javascript">
  <!--
     function stripTags(s){
        return s.replace(/<\/?[^>]+>/ig, '');
     }

     var str = stripTags("<author>jimek</author>");
     alert(str);
  //-->
  </script>
  这样,HTML标记后的文本又得到了“jimek”。
3.  string.match(regularExpression)
  该方法根据regularExpression正则表达式模式查找字符串string中的匹配字符项,将结果以数组形式返回。该数组有3个属性值,与exec方法返回的数组属性相同。若没有任何匹配,返回null。
注意:若regularExpression对象未设定全局匹配模式,则数组索引为0的元素就是匹配的整体内容,索引为19的元素则包含了子匹配得到的字符。若设定了全局模式,则数组包含了搜索到的所有整体匹配项。
只有注册用户登录后才能发表评论。

posts - 7, comments - 5, trackbacks - 0, articles - 4

Copyright © 【青峰小寨】