RegExp对象常用的方法有test和exec。其中test在上一篇文章中已经露过面了,现在我们来分析这两个方法的区别和应用场景。
exec是主要的方法,test的能力和江湖地位明显不如exec。因为pattern.test(text)只能返回true和false,即只能告诉我们是否找到匹配项,并不能返回找到的匹配项。如果仅需要知道是否存在匹配项,那么这种方法是非常方便,而且test方法一般是用在if语句中。
对于exec方法而言,每次只会返回一个匹配项,无论是否设置标志位g。区别在于,设置了标志位g,下次执行exec那么返回下一个匹配项,而不设置标志位g,无论执行多少次exec,总是返回字符串的第一个匹配项。
- <!DOCTYPE html>
- <html>
- <head>
- <title>RegExp exec() Example</title>
- <script type="text/javascript">
- var text = "friendly,quickly,fast,lovely,lying";
-
- var pattern = /.ly/g;
-
- var matches = pattern.exec(text);
- alert(matches.index); //0
- alert(matches[0]);
- alert(pattern.lastIndex);
- matches = pattern.exec(text);
- alert(matches.index);
- alert(matches[0]);
- alert(pattern.lastIndex);
-
- matches = pattern.exec(text);
- alert(matches.index);
- alert(matches[0]);
- alert(pattern.lastIndex);
- </script>
- </head>
- <body>
- </body>
- </html>
如果去掉pattern中的标志位,结果是这样的:
- <!DOCTYPE html>
- <html>
- <head>
- <title>RegExp exec() Example</title>
- <script type="text/javascript">
- var text = "friendly,quickly,fast,lovely,lying";
-
- var pattern = /.ly/;
-
- var matches = pattern.exec(text);
- alert(matches.index); //0
- alert(matches[0]);
- alert(pattern.lastIndex);
- matches = pattern.exec(text);
- alert(matches.index);
- alert(matches[0]);
- alert(pattern.lastIndex);
-
- matches = pattern.exec(text);
- alert(matches.index);
- alert(matches[0]);
- alert(pattern.lastIndex);
- </script>
- </head>
- <body>
- </body>
- </html>
这个lastIndex是RegExp实例的一个属性。表示搜索下一个匹配项的开始位置。除了这个属性外,RegExp还有global,ignoreCase, multiline,source属性。这些属性是顾名思义的。
参考文献:
1 Javascript高级程序设计 Nicholas C.Zakas著。
阅读(3250) | 评论(0) | 转发(1) |