正則表達(dá)式方法

正則表達(dá)式:使用單個(gè)字符串來(lái)描述、匹配一系列·符合·某個(gè)句法規(guī)則的字符串搜索模式。
語(yǔ)法:/正則表達(dá)式主體/修飾符
修飾符:i表示執(zhí)行對(duì)大小寫(xiě)不敏感的匹配管引。g表示執(zhí)行全局匹配(查找所有匹配而非在找到第一個(gè)匹配后停止)梆靖。m表示執(zhí)行多行匹配。

字符串方法(search()在抛、replace()钟病、match()、split())

1.search()方法刚梭,用于檢索指定字符串的子字符串肠阱,并返回子字符串的起始位置。
????語(yǔ)法:str.search(regexp);
????例如:使用正則表達(dá)式搜索 "Runoob" 字符串朴读,且不區(qū)分大小寫(xiě):

var str = "Visit Runoob!"; 
var n = str.search(/Runoob/i);//使用正則表達(dá)式
//結(jié)果輸出為6

var str = "Visit Runoob!"; 
var n = str.search(("Runoob");//使用字符串作為參數(shù)
//結(jié)果輸出為6

2.replace()方法屹徘,用在字符串中的一些字符替換另一些字符,或替換與正則表達(dá)式匹配的字符串衅金。
????語(yǔ)法:str.replace(regexp);
????例如:使用正則表達(dá)式且不區(qū)分大小寫(xiě)將字符串中的 Microsoft 替換為 Runoob :

var str = document.getElementById("demo").innerHTML; 
var txt = str.replace(/microsoft/i,"Runoob");//使用正則表達(dá)式
//結(jié)果輸出為Visit Runoob!

var str = document.getElementById("demo").innerHTML; 
var txt = str.replace("Microsoft","Runoob");//使用字符串作為參數(shù)
//結(jié)果輸出為Visit Runoob!

3.match()方法噪伊,可在字符串內(nèi)檢索指定的值,或找到一個(gè)或多個(gè)正則表達(dá)式的匹配氮唯,并以數(shù)組形式返回匹配結(jié)果酥宴。
????語(yǔ)法:str.match(regexp);
????例如:使用正則表達(dá)式且不區(qū)分大小寫(xiě)將全文字符串中的here查找出來(lái) :

var str = 'Where there is a will,there is a way!'
console.log(str.match(/here/gi));
//打印結(jié)果為:here,here,here

4.split()方法,用于把一個(gè)字符串分割成字符串?dāng)?shù)組您觉。
????語(yǔ)法:str.split(separator,limit);??separator為字符串或正則表達(dá)式拙寡,limit指定返回?cái)?shù)組的最大長(zhǎng)度。
????例如:

var str = 'How are you doing today?'
console.log(str.split());//打印結(jié)果為How are you doing today?
console.log(str.split(''));//打印結(jié)果為H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
console.log(str.split(' ',3));//打印結(jié)果為How are you
console.log(str.split('o'));//打印結(jié)果為H,w are y,u d,ing t,day?

RegExp對(duì)象方法(test()琳水、exec()肆糕、compile())

RegExp對(duì)象是一個(gè)預(yù)定義了屬性和方法的正則表達(dá)式對(duì)象般堆。
語(yǔ)法:var patt = new RegExp(pattern,modifiers); 或 var patt = /pattern/modifiers;
??????pttern為表達(dá)式,modifiers為修飾符用于指定全局匹配g诚啃,區(qū)分大小寫(xiě)i淮摔,和多行比配m。

1.test()方法始赎,用于檢測(cè)字符是否匹配某個(gè)模式和橙,有則返回true,否則返回false造垛。
????語(yǔ)法:patt.test(str)
????例如:搜索字符串中的字符 "e":

var patt = /e/;
patt.test("The best things in life are free!");
//輸出結(jié)果為true

2.exec()方法魔招,用于檢索字符串中是否有正則表達(dá)式的匹配值,有則返回匹配值五辽,否則返回null办斑。
????語(yǔ)法:patt.exec(str)
????例如:

var str = 'cat and dog';
var patt = /cat/g;
console.log(patt.exec(str));
//輸出結(jié)果為cat

var patt1 = /life/g;
console.log(patt1.exec(str));
//輸出結(jié)果為null

3.compile()方法,用于在腳本執(zhí)行過(guò)程中編譯正則表達(dá)式杆逗,也可用于改變和重新編譯正則表達(dá)式乡翅。
????語(yǔ)法:patt.compile(regexp,modifier)
????例如:

var str = 'cat and dog';
var patt = /cat/g;
console.log(str.replace(patt,'sheep'));//打印結(jié)果為sheep and dog
patt = /dog/g;或patt = new RegExp('dog','g');
patt.compile('dog','g');
console.log(str.replace(patt,'pig'));//打印結(jié)果為sheep and pig

擴(kuò)充常見(jiàn)正則表達(dá)式中的元字符及其含義:

字符 描述
\ 將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符罪郊、或一個(gè) 向后引用蠕蚜、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如悔橄,'n' 匹配字符 "n"靶累。'\n' 匹配一個(gè)換行符。序列 '\' 匹配 "" 而 "(" 則匹配 "("橄维。
^ 匹配輸入字符串的開(kāi)始位置尺铣。通常用來(lái)限定字符串
$ 匹配輸入字符串的結(jié)束位置拴曲。通常用來(lái)限定字符串
* 匹配前面的子表達(dá)式零次或多次争舞。例如,zo* 能匹配 "z" 以及 "zoo"澈灼。* 等價(jià)于{0,}竞川。
+ 匹配前面的子表達(dá)式一次或多次。例如叁熔,'zo+' 能匹配 "zo" 以及 "zoo"委乌,但不能匹配 "z"。+ 等價(jià)于 {1,}荣回。
? 匹配前面的子表達(dá)式零次或一次遭贸。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 心软。? 等價(jià)于 {0,1}壕吹。
{n} n 是一個(gè)非負(fù)整數(shù)著蛙。匹配確定的 n 次。例如耳贬,'o{2}' 不能匹配 "Bob" 中的 'o'踏堡,但是能匹配 "food" 中的兩個(gè) o。
{n,m} m 和 n 均為非負(fù)整數(shù)咒劲,其中n <= m顷蟆。最少匹配 n 次且最多匹配 m 次。例如腐魂,"o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o帐偎。'o{0,1}' 等價(jià)于 'o?'。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格挤渔。
[xyz] 字符集合肮街。匹配所包含的任意一個(gè)字符。例如判导,“[abc]”可以匹配“plain”中的“a”嫉父。
[^xyz] 負(fù)值字符集合。匹配未包含的任意字符眼刃。例如绕辖,“[^abc]”可以匹配“plain”中的“plin”任一字符。
[a-z] 字符范圍擂红。匹配指定范圍內(nèi)的任意字符仪际。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內(nèi)的任意小寫(xiě)字母字符昵骤。
[^a-z] 負(fù)值字符范圍树碱。匹配任何不在指定范圍內(nèi)的任意字符。例如变秦,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內(nèi)的任意字符成榜。
\b 匹配一個(gè)單詞的邊界,也就是指單詞和空格間的位置蹦玫。例如赎婚,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”樱溉;“\b1_”可以匹配“1_23”中的“1_”挣输,但不能匹配“21_3”中的“1_”。
\B 匹配非單詞邊界福贞×媒溃“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
\d 匹配一個(gè)數(shù)字字符完丽。等價(jià)于 [0-9]向瓷。
\D 匹配一個(gè)非數(shù)字字符。等價(jià)于 [^0-9]舰涌。
\n 匹配一個(gè)換行符猖任。等價(jià)于\x0a和\cJ。
\s 匹配任何不可見(jiàn)字符瓷耙,包括空格朱躺、制表符、換頁(yè)符等等搁痛。等價(jià)于[ \f\n\r\t\v]长搀。
\S 匹配任何可見(jiàn)字符。等價(jià)于[^ \f\n\r\t\v]鸡典。
\num 匹配num源请,其中num是一個(gè)正整數(shù)。

例題
1.給定字符串 str彻况,檢查其是否符合如下格式:XXX-XXX-XXXX谁尸,其中 X 為 Number 類型。
??解析:開(kāi)頭^和結(jié)尾$必須加上來(lái)限定字符串纽甘,3個(gè)數(shù)可表示為\d{3}良蛮,4個(gè)數(shù)則為\d{4},{n}表示前面內(nèi)容出現(xiàn)的次數(shù)悍赢。

function matchesPattern(str) {
    return /^\d{3}-\d{3}-\d{4}$/.test(str);
}
function matchesPattern(str) {
    return /^\d{3}-{2}-\d{4}$/.test(str);
}

2.給定字符串 str决瞳,檢查其是否包含 連續(xù)3個(gè)數(shù)字 ,如果包含左权,返回最新出現(xiàn)的 3 個(gè)數(shù)字的字符串皮胡,如果不包含,返回 false赏迟。
??解析:match()返回的是正則表達(dá)式匹配的字符串?dāng)?shù)組屡贺,連續(xù)的三個(gè)任意數(shù)字用正則表達(dá)式表示為/\d{3}/。

function captureThreeNumbers(str) {
    var dataArr = str.match(/[0-9][0-9][0-9]/);
    if(dataArr)
        return dataArr[0];
    else return false;
}
function captureThreeNumbers(str) {
     //聲明一個(gè)數(shù)組保存匹配的字符串結(jié)果
  var arr = str.match(/\d{3}/);
     //如果arr存在目標(biāo)結(jié)果瀑梗,則返回第一個(gè)元素烹笔,即最早出現(xiàn)的目標(biāo)結(jié)果
     if(arr)
         return arr[0];
     else return false;
 }

3.給定字符串 str裳扯,檢查其是否符合美元書(shū)寫(xiě)格式:以 $ 開(kāi)始;整數(shù)部分抛丽,從個(gè)位起,滿 3 個(gè)數(shù)字用 , 分隔;如果為小數(shù)饰豺,則小數(shù)部分長(zhǎng)度為2;正確的格式如:$1,023,032.03 或者 $2.03,錯(cuò)誤的格式如:$3,432,12.12 或者 $34,344.3亿鲜。
??解析:開(kāi)頭必是,而正則表達(dá)式中表示結(jié)尾,需要進(jìn)行轉(zhuǎn)義蒿柳,因此開(kāi)頭為^$;
????????然后dollar符后必然接數(shù)字饶套,并且最少一位,最多三位數(shù)垒探,可用{m,n}表示,最少m位妓蛮,最多n位,因此此段為\d{1,3};
????????接著圾叼,后面如還有數(shù)蛤克,則必然有,分隔夷蚊,并且后面必有3個(gè)數(shù)构挤,類似于,XXX的格式會(huì)出現(xiàn)0或者n次惕鼓,因此此段可表示為(,\d{3})*;
????????最后筋现,如有小數(shù)部分,則注意對(duì)小數(shù)點(diǎn)進(jìn)行轉(zhuǎn)義箱歧,此段可表示為(.\d{2})?;
????????使用test方法去檢測(cè)str

function isUSD(str) {
    return /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/.test(str);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矾飞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呀邢,更是在濱河造成了極大的恐慌凰慈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驼鹅,死亡現(xiàn)場(chǎng)離奇詭異微谓,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)输钩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)豺型,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人买乃,你說(shuō)我怎么就攤上這事姻氨。” “怎么了剪验?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵肴焊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我功戚,道長(zhǎng)娶眷,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任啸臀,我火速辦了婚禮届宠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己豌注,他們只是感情好伤塌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著轧铁,像睡著了一般每聪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上齿风,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天熊痴,我揣著相機(jī)與錄音,去河邊找鬼聂宾。 笑死果善,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的系谐。 我是一名探鬼主播巾陕,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纪他!你這毒婦竟也來(lái)了鄙煤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茶袒,失蹤者是張志新(化名)和其女友劉穎梯刚,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體薪寓,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亡资,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了向叉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锥腻。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖母谎,靈堂內(nèi)的尸體忽然破棺而出瘦黑,到底是詐尸還是另有隱情,我是刑警寧澤奇唤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布幸斥,位于F島的核電站,受9級(jí)特大地震影響咬扇,放射性物質(zhì)發(fā)生泄漏甲葬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一冗栗、第九天 我趴在偏房一處隱蔽的房頂上張望演顾。 院中可真熱鬧,春花似錦隅居、人聲如沸钠至。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)棉钧。三九已至,卻和暖如春涕蚤,著一層夾襖步出監(jiān)牢的瞬間宪卿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工万栅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佑钾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓烦粒,卻偏偏與公主長(zhǎng)得像休溶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扰她,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355