和正則相關(guān)的方法

1. String.prototype.replace

語(yǔ)法: str.replace(regexp|substr, newSubStr|function)

返回值: 一個(gè)部分或全部匹配由替代模式所取代的新的字符串

描述: 該方法并不改變調(diào)用它的字符串本身,而只是返回一個(gè)新的替換后的字符串。 在進(jìn)行全局的搜索替換時(shí),正則表達(dá)式需包含 g 標(biāo)志。

變量名 變量含義
$$ 插入一個(gè) "$"蒸绩。
$& 插入匹配的子串。
$` 插入當(dāng)前匹配的子串左邊的內(nèi)容。
$' 插入當(dāng)前匹配的子串右邊的內(nèi)容骡尽。
$n 假如第一個(gè)參數(shù)是 RegExp對(duì)象,并且 n 是個(gè)小于100的非負(fù)整數(shù)擅编,那么插入第 n 個(gè)括號(hào)匹配的字符串攀细。

替換字符串可以插入下面的特殊變量名:

變量名 變量含義
$$ 插入一個(gè) "$"箫踩。
$& 插入匹配的子串。
$` 插入當(dāng)前匹配的子串左邊的內(nèi)容谭贪。
$' 插入當(dāng)前匹配的子串右邊的內(nèi)容境钟。
$n 假如第一個(gè)參數(shù)是 RegExp對(duì)象,并且 n 是個(gè)小于100的非負(fù)整數(shù)俭识,那么插入第 n 個(gè)括號(hào)匹配的字符串慨削。

指定一個(gè)函數(shù)作為參數(shù)

你可以指定一個(gè)函數(shù)作為第二個(gè)參數(shù)。在這種情況下套媚,當(dāng)匹配執(zhí)行后缚态, 該函數(shù)就會(huì)執(zhí)行。 函數(shù)的返回值作為替換字符串堤瘤。 (注意: 上面提到的特殊替換參數(shù)在這里不能被使用玫芦。)

另外要注意的是, 如果第一個(gè)參數(shù)是正則表達(dá)式本辐, 并且其為全局匹配模式桥帆, 那么這個(gè)方法將被多次調(diào)用, 每次匹配都會(huì)被調(diào)用师郑。

參數(shù)名 描述
match 匹配的子串环葵。(對(duì)應(yīng)于上述的$&。)
p1,p2,... 假如replace()方法的第一個(gè)參數(shù)是一個(gè)RegExp 對(duì)象宝冕,則代表第n個(gè)括號(hào)匹配的字符串张遭。(對(duì)應(yīng)于上述的$1,$2等地梨。)
offset 匹配到的子字符串在原字符串中的偏移量菊卷。(比如,如果原字符串是“abcd”宝剖,匹配到的子字符串是“bc”洁闰,那么這個(gè)參數(shù)將是1)
string 被匹配的原字符串。

函數(shù)的參數(shù)

參數(shù)名 描述
match 匹配的子串万细。(對(duì)應(yīng)于上述的$&扑眉。)
p1,p2,... 假如replace()方法的第一個(gè)參數(shù)是一個(gè)RegExp 對(duì)象,則代表第n個(gè)括號(hào)匹配的字符串赖钞。(對(duì)應(yīng)于上述的$1腰素,$2等。)
offset 匹配到的子字符串在原字符串中的偏移量雪营。(比如弓千,如果原字符串是“abcd”,匹配到的子字符串是“bc”献起,那么這個(gè)參數(shù)將是1)
string 被匹配的原字符串洋访。
    function replacer(match, p1, p2, p3, offset, string) {
        // p1 is nondigits, p2 digits, and p3 non-alphanumerics
        return [p1, p2, p3].join(' - ');
    }
    var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
    console.log(newString);  // abc - 12345 - #$*%
    var re = /(\w+)\s(\w+)/;
    var str = "John Smith";
    var newstr = str.replace(re, "$2, $1");
    console.log(newstr);  // Smith, John
    function styleHyphenFormat(propertyName) {
        function upperToHyphenLower(match) {
            return '-' + match.toLowerCase();
        }
        return propertyName.replace(/[A-Z]/g, upperToHyphenLower);
    }
    styleHyphenFormat('borderTop') // 'border-top'

2. String.prototype.match

語(yǔ)法: str.match(regexp);

參數(shù): 一個(gè)正則表達(dá)式對(duì)象镣陕。如果傳入一個(gè)非正則表達(dá)式對(duì)象,則會(huì)隱式地使用 new RegExp(obj) 將其轉(zhuǎn)換為一個(gè) RegExp姻政。 如果你未提供任何參數(shù)呆抑,直接使用 match() ,那么你會(huì)得到一個(gè)包含空字符串的 Array :[""] 扶歪。

返回值: 如果字符串匹配到了表達(dá)式理肺,會(huì)返回一個(gè)數(shù)組,數(shù)組的第一項(xiàng)是進(jìn)行匹配完整的字符串善镰,之后的項(xiàng)是用圓括號(hào)捕獲的結(jié)果妹萨。如果沒(méi)有匹配到,返回null

描述

  1. 如果正則表達(dá)式不包含 g 標(biāo)志炫欺,則 str.match() 會(huì)返回和 RegExp.exec() 相同的結(jié)果乎完。而且返回的 Array 擁有一個(gè)額外的 input 屬性,該屬性包含被解析的原始字符串品洛。
  2. 另外树姨,還擁有一個(gè) index 屬性,該屬性表示匹配結(jié)果在原字符串中的索引(以0開(kāi)始)桥状。如果正則表達(dá)式包含 g 標(biāo)志帽揪,則該方法返回一個(gè) Array ,它包含所有匹配的子字符串而不是匹配對(duì)象辅斟。
  3. 捕獲組不會(huì)被返回(即不返回index屬性和input屬性)转晰。如果沒(méi)有匹配到,則返回 null 士飒。
    var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    var regexp = /[A-E]/gi;
    var matches_array = str.match(regexp);
    console.log(matches_array); // ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
    var str = 'For more information, see Chapter 3.4.5.1';
    var re = /see (chapter \d+(\.\d)*)/i;
    var found = str.match(re);
    console.log(found);
    // logs [ 'see Chapter 3.4.5.1',
    //        'Chapter 3.4.5.1',
    //        '.1',
    //        index: 22,
    //        input: 'For more information, see Chapter 3.4.5.1' ]
    
    // 'see Chapter 3.4.5.1' 是整個(gè)匹配查邢。
    // 'Chapter 3.4.5.1' 被'(chapter \d+(\.\d)*)'捕獲。
    // '.1' 是被'(\.\d)'捕獲的最后一個(gè)值酵幕。
    // 'index' 屬性(22) 是整個(gè)匹配從零開(kāi)始的索引扰藕。
    // 'input' 屬性是被解析的原始字符串。

3. String.prototype.search

語(yǔ)法: str.search(regexp)

參數(shù): 一個(gè)正則表達(dá)式(regular expression)對(duì)象芳撒。如果傳入一個(gè)非正則表達(dá)式對(duì)象邓深,則會(huì)使用 new RegExp(obj) 隱式地將其轉(zhuǎn)換為正則表達(dá)式對(duì)象。

返回值: 如果匹配成功笔刹,則 search() 返回正則表達(dá)式在字符串中首次匹配項(xiàng)的索引庐完。否則,返回 -1徘熔。

4. String.prototype.split

語(yǔ)法: str.split([separator[, limit]])

Tip:

  1. 如果空字符串("")被用作分隔符,則字符串會(huì)在每個(gè)字符之間分割淆党。
  2. 當(dāng)字符串為空時(shí)酷师,split()返回一個(gè)包含一個(gè)空字符串的數(shù)組讶凉,而不是一個(gè)空數(shù)組,如果字符串和分隔符都是空字符串山孔,則返回一個(gè)空數(shù)組懂讯。

注意: 如果分隔符是包含捕獲括號(hào)的正則表達(dá)式,則每次分隔符匹配時(shí)台颠,捕獲括號(hào)的結(jié)果(包括任何未定義的結(jié)果)將被拼接到輸出數(shù)組中褐望。但是,并不是所有瀏覽器都支持此功能串前。

    var myString = "Hello 1 word. Sentence number 2.";
    var splits = myString.split(/(\d)/);
    console.log(splits);  // [ "Hello ", "1", " word. Sentence number ", "2", "." ]

5. RegExp.prototype.test

語(yǔ)法: regexObj.test(str)

返回值: 如果正則表達(dá)式與指定的字符串匹配 瘫里,返回true;否則false荡碾。

6. RegExp.prototype.exec

語(yǔ)法: regexObj.exec(str)

返回值: 如果匹配成功谨读,exec() 方法返回一個(gè)數(shù)組,并更新正則表達(dá)式對(duì)象的屬性坛吁。返回的數(shù)組將完全匹配成功的文本作為第一項(xiàng)劳殖,將正則括號(hào)里匹配成功的作為數(shù)組填充到后面。 如果匹配失敗拨脉,exec() 方法返回 null哆姻。

描述:

    var re = /quick\s(brown).+?(jumps)/ig;
    var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
對(duì)象 對(duì)象/索引 描述 例子
result [0] 匹配的全部字符串 Quick Brown Fox Jumps
[1], ...[n ] 括號(hào)中的分組捕獲 [1] = Brown [2] = Jumps
index 匹配到的字符位于原始字符串的基于0的索引值 4
input 原始字符串 The Quick Brown Fox Jumps Over The Lazy Dog
re lastIndex 下一次匹配開(kāi)始的位置 25
ignoreCase 是否使用了 "i" 標(biāo)記使正則匹配忽略大小寫 true
global 是否使用了 "g" 標(biāo)記來(lái)進(jìn)行全局的匹配. true
multiline 是否使用了 "m" 標(biāo)記使正則工作在多行模式(也就是,^ 和 $ 可以匹配字符串中每一行的開(kāi)始和結(jié)束(行是由 \n 或 \r 分割的)玫膀,而不只是整個(gè)輸入字符串的最開(kāi)始和最末尾處矛缨。) false
source 正則匹配的字符串 quick\s(brown).+?(jumps)

下表列出這個(gè)腳本的返回值:

對(duì)象 對(duì)象/索引 描述 例子
result [0] 匹配的全部字符串 Quick Brown Fox Jumps
[1], ...[n ] 括號(hào)中的分組捕獲 [1] = Brown [2] = Jumps
index 匹配到的字符位于原始字符串的基于0的索引值 4
input 原始字符串 The Quick Brown Fox Jumps Over The Lazy Dog
re lastIndex 下一次匹配開(kāi)始的位置 25
ignoreCase 是否使用了 "i" 標(biāo)記使正則匹配忽略大小寫 true
global 是否使用了 "g" 標(biāo)記來(lái)進(jìn)行全局的匹配. true
multiline 是否使用了 "m" 標(biāo)記使正則工作在多行模式(也就是,^ 和 $ 可以匹配字符串中每一行的開(kāi)始和結(jié)束(行是由 \n 或 \r 分割的)匆骗,而不只是整個(gè)輸入字符串的最開(kāi)始和最末尾處劳景。) false
source 正則匹配的字符串 quick\s(brown).+?(jumps)
    var myRe = /ab*/g;
    var str = 'abbcdefabh';
    var myArray;
    while ((myArray = myRe.exec(str)) !== null) {
        var msg = 'Found ' + myArray[0] + '. ';
        msg += 'Next match starts at ' + myRe.lastIndex;
        console.log(msg);
    }
result: 
    Found abb. Next match starts at 3
    Found ab. Next match starts at 9

總結(jié)

  1. 如果你只是為了判斷是否匹配(true或 false),可以使用 RegExp.test() 方法碉就,或者 String.search() 方法盟广。
  2. 若想知道更多信息(然而執(zhí)行比較慢),可使用exec() 方法(類似于 String.prototype.match() 方法)瓮钥。 和 exec() (或者組合使用),一樣筋量,在相同的全局正則表達(dá)式實(shí)例上多次調(diào)用test將會(huì)越過(guò)之前的匹配。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碉熄,一起剝皮案震驚了整個(gè)濱河市桨武,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锈津,老刑警劉巖呀酸,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異琼梆,居然都是意外死亡性誉,警方通過(guò)查閱死者的電腦和手機(jī)窿吩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)错览,“玉大人纫雁,你說(shuō)我怎么就攤上這事∏悴福” “怎么了轧邪?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)羞海。 經(jīng)常有香客問(wèn)我忌愚,道長(zhǎng),這世上最難降的妖魔是什么扣猫? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任菜循,我火速辦了婚禮,結(jié)果婚禮上申尤,老公的妹妹穿的比我還像新娘癌幕。我一直安慰自己,他們只是感情好昧穿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布勺远。 她就那樣靜靜地躺著,像睡著了一般时鸵。 火紅的嫁衣襯著肌膚如雪胶逢。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天饰潜,我揣著相機(jī)與錄音初坠,去河邊找鬼。 笑死彭雾,一個(gè)胖子當(dāng)著我的面吹牛碟刺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播薯酝,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼半沽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吴菠?” 一聲冷哼從身側(cè)響起者填,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎做葵,沒(méi)想到半個(gè)月后占哟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年榨乎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗓化。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谬哀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出严肪,到底是詐尸還是另有隱情史煎,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布驳糯,位于F島的核電站篇梭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏酝枢。R本人自食惡果不足惜恬偷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帘睦。 院中可真熱鬧袍患,春花似錦、人聲如沸竣付。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)古胆。三九已至肆良,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逸绎,已是汗流浹背惹恃。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棺牧,地道東北人巫糙。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像陨帆,于是被迫代替她去往敵國(guó)和親曲秉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí)纲爸,c語(yǔ)言亥鸠,java語(yǔ)言,單片機(jī)的匯編語(yǔ)言等;大學(xué)畢...
    oceanfive閱讀 3,044評(píng)論 0 7
  • 自從年前得空寫了兩篇文章之后就開(kāi)始忙了负蚊,這一忙就是2個(gè)月??神妹。當(dāng)時(shí)信誓旦旦說(shuō)的定期寫篇博客的計(jì)劃也就泡湯了??,不過(guò)好...
    景科同學(xué)閱讀 1,153評(píng)論 0 9
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,212評(píng)論 0 4
  • 前言 對(duì)于正則,著稱火星文字,見(jiàn)名知意主要它晦澀難懂,一直以來(lái),看到它總是怕怕的,在平時(shí),也只是簡(jiǎn)單的用用,其主要...
    itclanCoder閱讀 757評(píng)論 0 2
  • 轉(zhuǎn)自: JS正則表達(dá)式一條龍講解家妆,從原理和語(yǔ)法到JS正則鸵荠、ES6正則擴(kuò)展,最后再到正則實(shí)踐思路 溫馨提示:文章很長(zhǎng)...
    前端渣渣閱讀 1,798評(píng)論 1 32