理解RegExp对象

来源:互联网 发布:制图软件免费下载 编辑:程序博客网 时间:2024/06/01 11:51

创建一个RegExp对象后,把它应用到某个字符串上面。下面看几个常用的方法:

1、test(),如果给定字符串(只有一个参数)匹配这个模式,它就返回true,否则返回false。例如:

<script type="text/javascript">var sToMatch = "cat";var reCat = new RegExp("cat");alert(reCat.test(sToMatch));</script>

如果模式在字符串中出现一次,就会认为是一个匹配,就会返回true。

2、exec(),有一个字符串参数,返回一个数组。数组的第一个条目是第一个匹配,其他的是反向引用。例如:

<script type="text/javascript">sToMatch = "a bat, a fAt, a cat";reCat = new RegExp("at", "gi");var arrMatches = reCat.exec(sToMatch);alert(arrMatches.length);</script>
3、String的match(),它会返回一个包含在字符串数组中的所有匹配的数组。这个方法调用String对象,同时传给它一个RegExp对象:

<script type="text/javascript">var x;var sToMatch = "a bat, a fAt, a cat";var reCat = new RegExp("at", "gi");var arrStringMatches = sToMatch.match(reCat);alert(arrStringMatches.length);for(x in arrStringMatches){document.write(x + ": " + arrStringMatches[x] + "<br/>");}</script>
4、search(),其行为与indexOf()类似,但是search使用一个RexExp对象而非仅仅一个字符串。该方法返回在字符串中出现的一个匹配的位置

<script type="text/javascript">var x;var sToMatch = "a bat, a fAt, a cat";var reCat = new RegExp("at", "gi");alert(sToMatch.search(reCat));</script>
5、replace(),用另一个字符串(第二个参数)来替换某个字串(第一个参数)的所有匹配。例如:

<script type="text/javascript">var sToChange = "The sky is red, red";var reRed = new RegExp("red", "g");var sResultText = sToChange.replace(reRed, function(sMatch){return "blue";});var sResultText1 = sToChange.replace(reRed, "blue");alert(sResultText);alert(sResultText1);</script>
6、split(),它可以将字符串分割成一系列子串并通过一个数组将他们返回,例如:

<script type="text/javascript">var sColors = "red, blue, yellow, green";var eeComma = new RegExp("\,");var arrColors = sColors.split(eeComma);alert(arrColors.length);for(x in arrColors){document.write(x + ": " + arrColors[x] + "<br/>");}</script>

下面来看一下RegExp对象的一些实例属性:

Global

布尔值,表示g(全局选项)是否已经设置

ignoreCase

布尔值,表示i(忽略大小写选项)是否已经设置

lastIndex

整数,代表下次匹配将会从哪个位置开始(只有当使用exec或test函数才会填入,否则为0)

Multiline

布尔值,表示m(多行模式选项)是否已经设置

Source

正则表达式的源字符串形式


<script type="text/javascript">var reTest = /[ba]*/i;alert(reTest.global);alert(reTest.ignoreCase);alert(reTest.multiline);alert(reTest.source);var sToMatch = "bbq is short for barbeque";var reB = /b/g;reB.exec(sToMatch)alert(reB.lastIndex);reB.exec(sToMatch)alert(reB.lastIndex);reB.exec(sToMatch)alert(reB.lastIndex);reB.exec(sToMatch)alert(reB.lastIndex);</script>

静态的RegExp属性对所有的正则表达式都有效。这些属性也都是与众不同的,因为他们都有两个名字:一个复杂名字和一个以美元符号开头的简短名字:

长名

短名

描述

Input

$_

最后用于匹配的字符串(传递给exec或test的字符串)

lastMatch

$&

最后匹配的字符

lastParen

$+

最后匹配的分组

leftContext

&`

在上次匹配的前面的字串

Multiline

$*

用于指定是否所有的表达式都使用多行模式的布尔值

rightContext

$’

在上次匹配之后的字串


<script type="text/javascript"><!--静态属性var sToMatch = "this has been a short , short summer";var reShort = /(s)hort/g;reShort.test(sToMatch);alert(RegExp.input);alert(RegExp.leftContext);alert(RegExp.rightContext);alert(RegExp.lastMatch);alert(RegExp.lastParen);<!--注意每次执行exec或test时,所有的属性(除了multiline外)都会被重新设置</script>




原创粉丝点击