JaveScript RegExp的用法

在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  <script id="MathJax-Element-211" type="math/tex">0~</script>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);
    }
}

原文地址:http://www.studyofnet.com/news/662.html

posted @ 2015-12-24 16:42  随缘的一个人  阅读(9)  评论(0)    收藏  举报  来源