RegExp()构造函数带有两个字符串参数,其中第二个是可选的。第一个参数包含正则表达式的主体部分,也就是正则表达式直接量中两条斜线之间的文本。第二个参数指定正则表达式的修饰符,只能传入修饰符g,i,m或者它们的组合。
示例:
// 全局匹配字符串中的5个数字,注意这里使用了"\\"而不是"\"
var zipcode = new RegExp("\\d{5}", "g");
1. RegExp的属性
每个RegExp对象包含5个属性。
---source: 只读字符串。包含正则表达式的文本。
---global: 只读布尔值。用以说明正则表达式是否带有修饰符g.
---ignoreCase: 只读布尔值。用以说明正则表达式是否带有修饰符i.
---multiline: 只读布尔值。用以说明正则表达式是否带有修饰符m.
---lastIndex: 可读/写的整数。如果匹配模式带有g修饰符,这个属性会存储在整个字符串中下一次检索的开始位置。
2. RegExp的方法
RegExp定义了两个用于执行模式匹配操作的方法。
2.1 exec()
exec()方法在一个字符串中执行匹配检索。如果它没有找到任何匹配,它就返回null,但如果它找到了一个匹配,它将返回一个数组。就像match()方法为非全局检索返回的数组一样,这个数组的第一个元素包含的是与正则表达相匹配的字符串,余下的元素是与圆括号内子表达式相匹配的子串。属性index包含了发生匹配的字符位置,属性input引用的是正在检索的字符串。
与match()方法不同,不管正则表达式是否具有全局修饰符g,exec()都会返回一样的数组。当match()的参数是一个全局正则表达式时,它返回由匹配结果组成的数组。相比之下,exec()总是返回一个匹配结果。当调用exec()的正则表达式具有修饰符g时,它将把当前正则表达式对象的lastIndex属性设置为紧挨着匹配子串的字符位置。当同一个正则表达式第二次调用exec()时,它将从lastIndex属性所指示的字符处开始检索。如果exec()没有发现任何匹配结果,它会将lastIndex重置为0.
示例:
var pattern = /Java/g;
var text = "JavaScript is more fun than Java!"
var result;
while((result = pattern.exec(text)) != null) {
alert("Matched ' " + result[0] + "' " + "at position " + result.index + "; next search begins at " + pattern.lastIndex)
}
2.2 test()
test()的参数是一个字符串,用test()对某个字符串进行检测,如果包含正则表达式的一个匹配结果,则返回true.
示例:
var pattern = /java/i;
pattern.test("JavaScript"); // 返回true
当一个全局正则表达式调用test()时,它的行为和exec()相同,因为它从lastIndex指定的位置处开始检索某个字符串,如果它找到了一个匹配的结果,那么它就立即设置lastIndex为当前匹配子串结束的位置。
网友评论