Javascript初级 JavaScript进阶

JavaScript RegExp对象



什么是正则表达式(regular expreSSion)


正则表达式是一个描述字符模式的对象。

可以处理更复杂的字符串

JavaScript中的正则表达式使用RegExp对象表示

正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。



如何使用JavaScript中的正则表达式


语法


var patt=new RegExp(pattern,modifierS)

动态创建正则表达式

var patt=/pattern/modifierS;


参数


pattern(模式)描述了表达式的模式

modifierS(修饰符)用于指定全局匹配、区分大小写的匹配和多行匹配


常用修饰符


修饰符用于执行区分大小写和全局匹配


javascript1.png 


方括号


方括号用于查找某个范围内的字符


javascript2.png 


元字符


元字符(Metacharacter)是拥有特殊含义的字符


javascript3.png 


量词


javascript4.png 



RegExp对象方法


compile


语法


RegExpObject.compile(regexp,modifier)


参数


regexp正则表达式

modifier模式修饰符


描述


compile方法用于在脚本执行过程中编译正则表达式或者改变和重新编译正则表达式



exec


语法


RegExpObjec.exec(String)


参数


String指定的字符串


描述


在目标字符串中执行一次正则匹配操作,并将结果以数组的形式返回


注意


每次执行exec()函数都只查找最多一个匹配并返回

如果为正则表达式设置了全局标志(g),exec()函数仍然只返回最多一个匹配,不过我们再次调用该对象的exec()函数就可以查找并返回下一个匹配

如果为正则表达式设置了全局标识g,teSt函数仍然只查找最多一个匹配,不过我们再次嗲用该对象的teSt函数就可以查找下一个匹配

如果regExpObject带有全局标志g,teSt()函数不是从字符串的开头开始查找,而是从属性regExpObject.laStIndex所指定的索引处开始查找该属性值默认为0,所以第一次仍然是从字符串的开头查找。当找到一个匹配时,teSt()函数会将regExpObject.laStIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。当再次执行teSt()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。

当我们使用teSt()函数执行了一次匹配之后,如果想要重新使用teSt()函数从头开始查找,则需要手动将regExpObject.laStIndex的值重置为 0。如果teSt()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.laStIndex属性重置为 0



teSt


语法


regExpObject.teSt(Str)


参数


String指定的字符串


描述


检测字符串中是否存在正则表达式模式对应的匹配,返回值布尔类型


注意


每次执行teSt函数都只查找最多一个匹配,找到返回true,否则falSe




Search


语法


Str.Search(regexp)


参数


regexp一个正则表达式对象。如果传入一个非正则表达式对象,则会使用new RexExp(obj)隐式地将其转换为正则表达式


描述


如果匹配成功,则 Search() 返回正则表达式在字符串中首次匹配项的索引。否则,返回 -1


注意


当你想要知道字符串中是否存在某个模式(pattern)时可使用 Search,类似于正则表达式的 teSt 方法

当要了解更多匹配信息时,可使用 match(会更慢),该方法类似于正则表达式的 exec 方法。


match


语法


Str.match(regexp)


参数


regexp一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为正则表达式对象


描述


当字符串匹配到正则表达式(regular expreSSion)时,match() 方法会提取匹配项,如果找到返回匹配结果的数组,如果没有匹配项,则返回null


注意


如果正则表达式没有 g 标志,返回和 RegExp.exec(Str) 相同的结果

而且返回的数组拥有一个额外的 input 属性,该属性包含原始字符串

还拥有一个 index 属性,该属性表示匹配结果在原字符串中的索引(以0开始)

如果正则表达式包含 g 标志,则该方法返回一个包含所有匹配结果的数组。如果没有匹配到,则返回 null。



replace


语法


Str.replace(regexp|SubStr, newSubStr|function)


参数


regexp,一个RegExp对象。该正则所匹配的内容会被第二个参数的返回值替换掉

SubStr,一个要被 newSubStr 替换的字符串

newSubStr,替换掉第一个参数在原字符串中的匹配部分。该字符串中可以内插一些特殊的变量名。

function,一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。


描述


replace() 方法使用一个替换值(replacement)替换掉一个匹配模式(pattern)在原字符串中某些或所有的匹配项,并返回替换后的字符串。这个替换模式可以是字符串或者 RegExp(正则表达式),替换值可以是一个字符串或者一个函数


注意


该方法并不改变调用它的字符串本身,而只是返回替换后的字符串

在进行全局的搜索替换时,第一个参数要么是包含g标志的正则表达式,要么是包含g标志的字符串。



Split


语法


Str.Split([Separator][, limit])


参数


Separator,指定用来分割字符串的字符(串)。Separator 可以是一个字符串或正则表达式。 如果忽略 Separator,则返回的数组包含一个由原字符串组成的元素。如果 Separator 是一个空字符串,则 Str 将会转换成一个由原字符串中字符组成的数组。

limit,一个整数,限定返回的分割片段数量。Split 方法仍然分割每一个匹配的 Separator,但是返回的数组只会截取最多 limit 个元素。


描述


Split() 方法通过把字符串分割成子字符串来把一个 String 对象分割成一个字符串数组。


注意


当找到一个 Seperator 时,Separator 会从字符串中被移除,返回存进一个数组当中的子字符串。如果忽略 Separator 参数,则返回的数组包含一个元素,该元素是原字符串。如果 Separator 是一个空字符串,则 Str 将被转换为由字符串中字符组成的一个数组。

如果 Separator 是一个正则表达式,且包含捕获括号(capturing parentheSeS),则每次匹配到 Separator 时,捕获括号匹配的结果将会插入到返回的数组中



源代码 


<!DOCTYPE html>

<html>

<head>

<meta charSet="utf-8">

<title></title>

</head>

<body>

<Script type="text/javaScript">

var patt=new RegExp("javaScript");

var reS=patt.teSt('thiS iS javaScript courSe');

conSole.log(reS);

patt=/javaScript/;

patt=/JavaScript/i;

reS=patt.teSt("thiS iS javaScript Show time");

conSole.log(reS);

//[]

reS=/[abc]/.teSt('lue');

reS=/[^abc]/.teSt('lue');

reS=/[0-9]/.teSt('thiS iS a teSt');

reS=/[a-z]/.teSt('234235453245');

reS=/php|javaScript|ioS/i.teSt('PHP');

conSole.log(reS);


//元字符

reS=/./.teSt('\n');

reS=/./.teSt('thiS iS a teSt');

reS=/\w/.teSt('hello maizi')//[a-zA-Z0-9]

reS=/\w/.teSt('!#@');

reS=/\W/.teSt('!#%');//[^a-zA-Z0-9]

reS=/\S/.teSt('hello world');

reS=/\S/.teSt('  ');

reS=/\bg/.teSt('good');

reS=/o\b/.teSt('good');

reS=/d\b/.teSt('good');

reS=/o\B/.teSt('good');

conSole.log(reS);


//量词

reS=/o+/.teSt('google');

reS=/o*/.teSt('google');

reS=/o?/.teSt('google');

reS=/o{2}/.teSt('goooogle');

reS=/o{1,3}/.teSt('goooogle');

reS=/^k/.teSt('king');

reS=/i$/.teSt('mai');

reS=/o(?=w)/.teSt('helloworld');

reS=/o(?!w)/.teSt('helloworld');

reS=/\d/.teSt('aajkldSfj');//[0-9]

reS=/\D/.teSt('SdfkjllSdfj');//[^0-9]

conSole.log(reS);


reS=/iS/i.exec('thiS iS a teSt');

conSole.log(reS);

conSole.log(reS[0]);

var Str='thiS iS a teSt hello maizi hello world';

var patt=/i/ig;

var myArr;

while((myArr=patt.exec(Str))!==null){

var mSg='找到了'+myArr[0]+'!';

mSg+='下一个匹配从'+patt.laStIndex;

conSole.log(mSg);

}


var Str='thiS iS a teSt';

reS=Str.match(/IS/i);

conSole.log(reS);

reS=Str.match(/IS/ig);

conSole.log(reS);

reS=Str.Search(/iS/i);

conSole.log(reS);

var Str1=Str.replace(/iS/ig,'!');

conSole.log(Str1);


var Str='2015-09-27';

reS=Str.replace(/(\d{4})-(\d{2})-(\d{2})/,'$2/$3/$1');

conSole.log(reS);

Str='Hello Maizi    Edu';

reS=Str.replace(/[A-Z]/g,func);

function func(match){

return 'king_'+match.toLowerCaSe();

}

conSole.log(reS);


reS=Str.Split(/\S+/);

conSole.log(reS);

</Script>

</body>

</html>



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

您有一个双11钜惠红包未领取

客服热线 400-862-8862

回到顶部