创建一个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>