JavaScript 1.10 RegExp的方法和属性

JavaScript 1.10 RegExp的方法和属性

 

1.RegExp 对象的方法

RegExp 对象有 3个方法:test()exec()以及 compile()

test() 方法

检索字符串中的指定值。

返回值是 true false

exec() 方法

检索字符串中的指定值。

返回值是被找到的值或null

compile() 方法

用于改变 RegExp

 

1)test()

var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));  //true 

2)exec()

var patt1=new RegExp("a.a");
document.exec(patt1.test("aaa aba aca"));  //aaa
document.exec(patt1.test("Aaa aba aca"));  //aba
document.exec(patt1.test("Aaa Aba aca"));  //aca
document.exec(patt1.test("Aaa Aba Aca"));  //null

1:每一次只返回第一个找到的。且每一次都是从最前头开始找。

 

如果需要找到所有某个字符的所有存在,向 RegExp对象添加第二个参数 "g"

在使用 "a.a" 参数时,exec() 的工作原理如下:

·找到第一个 "a.a",并存储其位置

·如果再次运行 exec()则从存储的位置开始检索,并找到下一个 "a.a",并存储其位置

var patt1=new RegExp("a.a","g");
do
{
result=patt1.exec("aaa aba aca");
document.write(result+"  ");
}
while (result!=null)

结果:aaa aba aca null

2:若不加"g",每一次都是从最前头开始找,程序会无限循环。

 

3)compile()

var patt1=new RegExp("e");

patt1.compile("d");

1:通过compile()方法是对patt1进行修改。若:patt1=new RegExp("d");同样可以达到效果,但是创建了一个新的RegExp

2:正则表达式字面量与构造函数的区别:

ECMAScript 3中规定:

正则表达式字面量共享一个RegExp实例;构造函数每次创建一个新的RegExp实例。

var reg=null;
for(var i=1;i<5;i++){
  reg=/cat/g;
  reg.test("cataaaaaaa");   
  //因为共享一个,第二次不会从头开始。
  //结果:true  false  true(上一次测试到末尾没找到,这次从头开始)  false
}
for(var i=1;i<5;i++){
  reg=new RegExp("cat","g");
  reg.test("cataaaaaaa");   
  //因为每次都新创建,每次从头开始,结果:true  true  true  true
}
注: ECMAScript 5 规定,正则表达式字面量与构造函数都要每次创建新 RegExp 实例。 IE9+ Firefox4+ Chrome 都据此做了修改。

 

2.支持正则表达式的 String 对象的方法

 search()  

检索与正则表达式相匹配的值。

返回位置值(0开始)-1

 match()

找到一个或多个正则表达式的匹配。

返回匹配值的数组(一个或多个或null

 replace()

替换与正则表达式匹配的子串。

 返回原对象被替换后的结果

 split()

把字符串分割为字符串数组。

 返回分割后的字符串数组

1)search()

var str="Visit W3School!"
document.write(str.search(/W3School/));  //6
document.write(str.search(/w3School/));  //search()对大小写敏感,返回-1
document.write(str.search(/w3School/i));  //6
注: search() 不执行全局匹配,即使有标志 "g" 。并且总是从字符串的开始进行检索,这意味着它总是返回第一个匹配的位置。

 

2)match()

var str="Visit W3School! Visit W3School!"
document.write(str.search(/W3School/));  //只找第一个,结果:W3School
document.write(str.search(/w3School/));  //只找第一个,但没找到,结果null
document.write(str.search(/W3School/g));  //找全部,结果:W3SchoolW3School
注:不加 "g" ,只找第一个。加 "g" ,找全部。返回值为找到的匹配结果。

 

3)replace()

格式:replace(正则表达式,“替换值”);

1:用后者替换正则表达式,正则表达式"g"时,替换全部;否者替换第一个。

2:替换值是字符串时,加引号。替换值也可以是函数,是函数时,它返回的字符串将作为替换文本使用。

3:替换值是特殊字符时:

$1$2...$99

regexp 中的第1 到第99 个子表达式相匹配的文本。

子表达式就是正则表达式中的(),分别对应1-99()

$&

regexp 相匹配的子串。

$`

位于匹配子串左侧的文本。

$'

位于匹配子串右侧的文本。

$$

直接量符号。

范例:

var str="Visit Microsoft! Visit Microsoft! Visit Microsoft!";
document.write(str.replace(/Microsoft/, "W3School"));  //用W3School替换掉第一个Microsoft
document.write(str.replace(/Microsoft/g, "W3School"));  //用W3School替换掉全部Microsoft
document.write(str.replace(/Microsoft/i, "W3School"));  //不区分大小写
 
name = "Doe, John";
/*  $1,$2分别代表第一个(\w+)和第二个(\w+),第一个是Doe,第二个是John。这里的,是name里的,是要匹配的字符*/
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 , $1");  //结果:John , Doe
 
name = '"a", "b"';
/*  $1代表([^"]*),≥0个非"字符,这个字符前后都有"。在name里就是a和b  */
name.replace(/"([^"]*)"/g, "'$1'");    //结果:'a','b'
 
name = 'aaa bbb ccc';
/*replace参数为函数时,它返回的字符串将作为替换文本使用*/
uw=name.replace(/\b\w+\b/g, function(word){
  return word.substring(0,1).toUpperCase()+word.substring(1);}
  );

 

4split()

格式:stringObject.split(separator,howmany)

 separator 

必需。字符串或正则表达式,从该参数指定的地方分割 stringObject

 howmany 

可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个

参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

范例:

var str="How are you doing today?";
 
document.write(str.split(" "));  //How,are,you,doing,today?
document.write(str.split(""));  //H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
document.write(str.split(" ",3));//How,are,you
 
"2:3:4:5".split(":"); //将返回["2", "3", "4", "5"]
"|a|b|c".split("|");	//将返回["", "a", "b", "c"],第一个就是,分割为""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值