正则表达式的简单理解:
一、正则表达式的声明(两种):
1.通过构造函数声明:var 变量名 = new RegExp(/表达式/);
2.通过直接量定义:var 变量名 = /表达式/
二、正则表达式的常用方法(三种):
1.RegExp.test(str);返回一个布尔值,判断str字符串是否符合要匹配的正则表达式。常用于验证
注:str为要检测的字符串。
2.RegExp.exec(str);返回一个数组,该方法通过对你指定的字符串进行一次匹配检测,获取字符串中的第一个与正则表达式的内容,并且将匹配的内容和子匹配的结果存放在返回数组中
注:该方法与此数组的内容和正则是否是全局匹配有很大的关系--解释如下:
(1)在非全局匹配模式下,此方法的作用和match()函数是一样的,只能够在字符串中匹配一次。如果没有找到匹配的字符串,那么返回null;否则将返回一个数组,
数组的第0个元素存储的是匹配字符串;
第1个元素存放的是第一个引用型分组(子表达式)匹配的字符串;
第2个元素存放的是第二个引用型分组(子表达式)匹配的字符串,依次类推。
同时此数组还包括两个对象属性,index属性声明的是匹配字符串的起始字符在要匹配的完整字符串中的位置,input属性声明的是对要匹配的完整字符串的引用,也就是(str)。
(2)在全局匹配模式下,此函数返回值同样是一个数组,并且也只能够在字符串中匹配一次。如果没有找到匹配的字符串,那么返回null;当exec()找到与表达式相匹配的字符串时,获取一个匹配项,再次调用exec方法,获取下一个匹配项,如此往复;
3.RegExp.replace();replace 方法可以用来将文本中的一部分(由字符串或正则表达式表示)替换为不同的字符串。
例如:1.RegExp.replace(str1,str2);传入两个参数
'abcabcabc'.replace('bc','X'); //aXabcabc
2.RegExp.replace(RegStr,str2);第一个参数传入一个RegExp对象(也可以是一个带分组的正则表达式);
'abcabcabc'.replace(/bc/g,'X'); //aXaXaX
3.第一个参数传入的是带分组的正则表达式,第二个参数可以使用$1-$9 来替换分组的内容。
'1<%2%>34<%567%>89'.replace(/<%(\d+)%>/g,'@#$1#@');//"1@#2#@34@#567#@89"
4.strObj.replace(regObj,function(){});把replace方法的第二个参数传入一个function,这个function会在每次匹
配替换的时候调用,算是个每次替换的回调函数,我们使用了回调函数的第一个参数,也就是匹配内容,其实回调函
数一共有四个参数;
第一个参数很简单,是匹配字符串
第二个参数是正则表达式分组内容,没有分组则没有该参数
第三个参数是匹配项在字符串中的index
第四个参数则是原字符串
三、正则的贪婪模式:
复习基础:
"*" 重复零次或更多 x>=0;
"+" 重复一次或更多次 x>=1;
"?" 重复零次或一次 x=(0||1);
()表示一组
[]表示一个字符的位置
{}表示次数
所谓的贪婪模式就是第一次正则的分组尽可能的匹配更多的字符;
例如:
console.log( /(.+)(.+)(.+)/.exec( 'abcdefg' ) );// ‘abcde’ ,'f','g'
console.log( /(.+?)(.+)(.+)/.exec( 'abcdefg' ) );// 'a','bcdef', 'g'
console.log( /(.*)(.*)(.*)/.exec( 'abcdefg' ) ); //'abcdefg','',''
小技巧:碰见贪婪模式这种的正则匹配,可以从后往前进行配对,先把后面的匹配完成剩下的都是前面 的贪婪匹配,从前往后匹配,很难找到思路。