五個(gè)屬性
- global:是否全局搜索,默認(rèn)是false
- ignoreCase:是否大小寫敏感售葡,默認(rèn)是false
- multiline:多行搜索,默認(rèn)值是false
- lastIndex:是當(dāng)前表達(dá)式模式首次匹配內(nèi)容中最后一個(gè)字符的下一個(gè)位置丛晦,每次正則表達(dá)式成功匹配時(shí)洼怔,lastIndex屬性值都會(huì)隨之改變
- source:正則表達(dá)式的文本字符串
兩個(gè)常用方法
- RegExp.prototype.test(str)
方法用于測(cè)試字符串參數(shù)中是否存在正則表達(dá)式模式,如果存在返回true又官,否則返回false - RegExp.prototype.exec(str)
方法用于正則表達(dá)式模式在字符串中運(yùn)行查找延刘,如果exec()找到了匹配的文本,則返回一個(gè)結(jié)果數(shù)組六敬,否則返回null碘赖。
除了數(shù)組元素和length屬性之外,exec()方法返回對(duì)象還包括兩個(gè)屬性外构。
- index屬性聲明的是匹配文本的第一個(gè)字符位置
- input屬性則存放的是被檢索的字符串
String.prototype.search(reg)
seatch()方法用于檢索字符串中指定的子字符串普泡,或檢索與正則表達(dá)式相匹配的子字符串
search()方法不執(zhí)行全局匹配,它將忽略標(biāo)志g审编,它同時(shí)忽略正則表達(dá)式對(duì)象的lastIndex屬性撼班,并總是從字符串的開始進(jìn)行檢索,這意味著它總是返回字符串的第一個(gè)匹配位置
'a1b2c3'.search(/\d/g); //1
'a1b2c3'.search(/\d/); //1
String.prototype.match(reg)
match()方法將檢索字符串垒酬,以找到一個(gè)或多個(gè)與regexp匹配的文本砰嘁,但regexp是否具有標(biāo)志g對(duì)結(jié)果影響很大眯亦。
- 非全局調(diào)用:
如果regexp沒有標(biāo)志g,那么match()方法就只能在字符串中執(zhí)行一次匹配般码,如果沒有找到任何匹配的文本妻率,match將返回null。否則他將返回一個(gè)數(shù)組板祝,其中存放了與它找到的匹配文本有關(guān)的信息宫静。
該數(shù)組的第一個(gè)元素存放的是文本,而其余的元素存放的是與正則表達(dá)式的子表達(dá)式匹配的文本券时。除了這些常規(guī)的數(shù)組元素之外孤里,返回的數(shù)組還含有兩個(gè)對(duì)象屬性
- index屬性聲明的是匹配文本的起始字符在字符串中的位置
- input屬性聲明的是對(duì)stringObject的引用
- 全局調(diào)用
如果regexp具有標(biāo)志g則match()方法將執(zhí)行全局檢索,找到字符串中的所有匹配子字符串
若沒有找到任何匹配的子串橘洞,則返回 null捌袜。如果找到了一個(gè)或多個(gè)匹配子串,則返回一個(gè)數(shù)組
不過全局匹配返回的數(shù)組的內(nèi)容與前者大不相同炸枣,它的數(shù)組元素中存放的是字符串中所有的匹配子串虏等,而且也沒有index屬性或input屬性适肠。
String.prototype.replace(reg, replaceStr)
關(guān)于string對(duì)象的replace方法霍衫,我們最常用的是傳入兩個(gè)字符串的做法,但這種做法有個(gè)缺陷侯养,只能replace一次
'abcabcabc'.replace('bc','X'); //aXabcabc
replace方法的第一個(gè)參數(shù)還可以傳入RegExp對(duì)象逛揩,傳入正則表達(dá)式可以使replace方法更加強(qiáng)大靈活
'abcabcabc'.replace(/bc/g,'X'); //aXaXaX
'abcaBcabC'.replace(/bc/gi,'X'); //aXaXaX
String.prototype.replace(reg, function)
可以通過修改replace方法的第二個(gè)參數(shù)惧笛,使replace更加強(qiáng)大搂誉,在前面的介紹中徐紧,只能把所有匹配替換為固定內(nèi)容,但如果我希望把一個(gè)字符串中所有數(shù)字炭懊,都用小括號(hào)包起來該怎么弄
'2398rufdjg9w45hgiuerhg83ghvif'.replace(/\d+/g,function(r){
return '('+r+')';
}); //"(2398)rufdjg(9)w(45)hgiuerhg(83)ghvif"
把replace方法的第二個(gè)參數(shù)傳入一個(gè)function,這個(gè)function會(huì)在每次匹配替換的時(shí)候調(diào)用拂檩,算是個(gè)每次替換的回調(diào)函數(shù)侮腹,我們使用了回調(diào)函數(shù)的第一個(gè)參數(shù),也就是匹配內(nèi)容稻励,其實(shí)回調(diào)函數(shù)一共有四個(gè)參數(shù)
- 第一個(gè)參數(shù)很簡(jiǎn)單父阻,是匹配字符串
- 第二個(gè)參數(shù)是正則表達(dá)式分組內(nèi)容愈涩,沒有分組則沒有該參數(shù)
- 第三個(gè)參數(shù)是匹配項(xiàng)在字符串中的index
- 第四個(gè)參數(shù)則是原字符串
String.prototype.split(reg)
我們經(jīng)常使用split方法把字符串分割為字符數(shù)組
'a,b,c,d'.split(','); //["a", "b", "c", "d"]
和replace方法類似,在一些復(fù)雜的分割情況下我們可以使用正則表達(dá)式解決
'a1b2c3d'.split(/\d/); //["a", "b", "c", "d"]