在js中,正则表达式是由一个RegExp对象表示的,RegExp
是正则表达式的缩写。RegExp简单的模式可以是一个单独的字符。更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。可以使用一个RegExp()构造函数来创建RegExp对象,也可以使用直接量语法。
一、RegExp的定义
1、显式构造函数
new RegExp(pattern, attributes);
参数
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串,包含属性 “g”、”i” 和 “m”,分别用于指定全局匹配、区分大小写的匹配和多行匹配。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
attributes属性值 描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。
返回值
一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。
如果不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。
2、隐式构造函数(直接量语法)
/pattern/attributes
参数及意义和显式构造函数一样
二、RegExp 静态属性
http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
三、RegExp实例属性
http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
四、RegExp实例方法
exec 语法格式为exec(str)。该方法使用创建RegExp对象实例时所指定的表达式模式对一个字符串进行搜索,并返回一个包含搜索结果的数组。
如果为正则表达式设置了全局标志(g),可以通过多次调用exec和test方法在字符串中进行连续搜索,每次都是从RegExp对象的lastIndex属性值指定的位置开始搜索字符串。
如果没有设置全局标志(g),则exec和test方法忽略RegExp对象的lastIndex属性值,从字符串的起始位置开始搜索。 如果exec方法没有找到匹配,返回值为null;如果找到匹配,则返回一个数组,并更新RegExp对象中有关静态属性以反映匹配情况。 返回数组中的元素0包含了完整的匹配结果,而元素1~n依次是表达式模式中定义的各个子匹配的结果。
test 语法格式为test(str)。该方法检查一个字符串中是否存在创建RegExp对象实例时所指定的表达式模式,如果存在就返回True,否则返回False。 如果找到匹配项,则会更新RegExp对象中的有关静态属性,以反映匹配情况。
compile 语法格式为compile(“pattern”[,”flags”])。该方法可以更换RegExp对象实例所使用的表达式模式,并将新的表达式模式编译为内部格式,从而使以后的匹配过程执行更快。
五、RegExp几个常用方法说明
1、Test()
RegExpObject.test(string)
判断string中是否有与表达式匹配的字符串,有则返回true,否则返回false
例如
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));
由于该字符串中存在字母 “e”,以上代码的输出将是:true
2、exec()
RegExpObject.exec(string)
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
例如
JScript 代码 复制
var str= "cat2,hat8" ;
var reg=/c(at)\\d/ ; 有分组
console.info(reg.exec(str));//运行返回 ["cat2", "at"]
3、Match()
string.match(RegExpObject)
它和exec有类似,也是返回一个数组,但它们有区别。
区别1:如下如果正则中有g,则match返回所有匹配。而exec永远只返回与第一个匹配有关的信息。
区别2:如果没有g,但是有分组,则两个结果一样。或者没有g也没有分组。只返回第一个匹配。
实例
JScript 代码 复制
var someText= "web2.0 .net2.0" ;
var pattern=/(\\w+)(\\d)\\.(\\d)/g;
var outCome_exec=pattern.exec(someText); ["web2.0","web","2","0"]
var outCome_matc=someText.match(pattern); ["web2.0","net2.0"]
4、Search()
stringObject.search(regexp)
返回第一个匹配的起始位置。
5、Replace()
stringObject.replace(regexp/substr,replacement)
返回新替换过后的新字符串。
如果是字符串,替换第一个。如果是正则表达式中有g,则全部替换,否则也是一个。
例如
JScript 代码 复制
function fn() {
for(var i = 0;i < arguments.length;i++){
alert("第"+(i+1)+"个参数的值:"+arguments[i]);
}
}
var str = '<div id="{wo}" >{ni}</div>';
str.replace(/\\{([a-z]+)\\}/ig, fn);
6、Split()
stringObject.split(separator,howmany)
第一个参数是字符串或者正则表达式,从它开始分解字符串。第二个参数表示返回数组的最大长度。
例如
JScript 代码 复制
var str= "cat2,hat8" ;
var reg=/at/ ;
console.info(str.split(reg));
["c", "2,h", "8"]
console.info(str.split(reg,2));
["c", "2,h"]
7、compile()
compile() 方法用于改变 RegExp。
compile() 既可以改变检索模式,也可以添加或删除第二个参数。
例如
JScript 代码 复制
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));
patt1.compile("d");
document.write(patt1.test("The best things in life are free"));
8、关于 0 99的例子
JScript 代码 复制
var str="alert.login.verifyfailed=Your email or password is incorrect!";
var reg=/^alert.\\w*(.\\w*)=((?:\\w*[ !\\.])*)$/;
var out=str.match(reg);
console.info($0);
9、测试RegExp属性
JScript 代码 复制
function demo(){
var str = "abcdd abcsszabcdddccabAbcddABCEE";
var regex = /a(bc)/gi;
var t = null;
while(t = regex.exec(str)){
var result = "index = " + t.index + ", match = " + t[0] + ", group = " + t[1];
result += "/n$1=" + RegExp.$1 + ", lastMatch=" + RegExp.lastMatch + ", leftContext=" + RegExp.leftContext;
alert(result);
}
}