網(wǎng)易微專(zhuān)業(yè)之《前端工程師》學(xué)習(xí)筆記(11)-JS正則

正則表達(dá)式RegExp

兩種方式:

/pattern/attrs
new RegExp(pattern,attrs)


regexObj.test(str)
測(cè)試正則表達(dá)式與指定字符串是否匹配

/13566668888/.test("1356666888");  //false
/13566668888/.test("13566668888");   //true
/13566668888/.test("x1356666888y");   //true

第三個(gè)也是true的,不是我們希望的,那要怎么辦呢。

就要用到”錨點(diǎn)“

錨點(diǎn)

錨點(diǎn)是用來(lái)干什么的呢,它是用來(lái)匹配位置的

  • ^:起始位置
/^http:/.test("http://www.163.com");  //true
/^http:/.test("ahttp://www.163.com");  //false
  • $:結(jié)尾位置
/\.jpg$/.test("1.jpg");  //true
/\.jpg$/.test("1.jpga");   //false

  • \b:?jiǎn)卧~邊界
/\bis\b/.test("this");  //false
/\bis\b/.test("this is tom");   //true

學(xué)過(guò)錨點(diǎn)了之后,我們?cè)賮?lái)看最初的那個(gè)問(wèn)題,我們可以把它改成下面的正則語(yǔ)句,然后測(cè)試那個(gè)剛才讓我們不是很滿意的問(wèn)題。

/^13566668888$/

/^13566668888$/.test("x13566668888y");  //false
/^13566668888$/.test("13566668888");  //true

但是呢,我們比如做個(gè)下面的測(cè)試:

···
/^13566668888$/.test("13512345678"); //false
···

這個(gè)結(jié)果顯然也不是我們想要的,我們想要的結(jié)果是做一個(gè)通用的手機(jī)號(hào)碼測(cè)試的正則表達(dá)式,那這個(gè)怎么辦呢,就需要用到第二個(gè)我們要講的知識(shí)點(diǎn)——”字符類(lèi)“

字符類(lèi)

字符類(lèi)是什么呢,是匹配一類(lèi)字符中的一個(gè)。

  • [abc]:a或b或c;
  • [0-9]:一個(gè)數(shù)字; [^0-9]:非數(shù)字的一個(gè)字符;
  • [a-z]:一個(gè)字母;
  • .:任一字符(換行除外);

學(xué)了字符類(lèi)以后呢,我們就可以把我們最初的正則表達(dá)式再重新調(diào)整下,然后測(cè)試下能不能測(cè)試通用的手機(jī)號(hào)碼。

/^1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/

/^1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/.test("13512345678"); //true

但是問(wèn)題又來(lái)了,我們會(huì)不會(huì)覺(jué)得這[0-9]寫(xiě)的太長(zhǎng)了,能不能簡(jiǎn)寫(xiě)呢,這個(gè)問(wèn)題的解決方法,我們就要用到正則表達(dá)式的第三個(gè)知識(shí)點(diǎn)——元字符。

元字符

元字符是什么呢,是具有特殊意義的字符。

其實(shí)我們上面已經(jīng)介紹過(guò)一些元字符了,比如:

  • ^、$、\b

另外還有一些元字符:

  • \d:[0-9];\D:[^\d];

  • \s:空白符;\S:[^\s]表示非空白符;

  • \w:[A-Za-z0-9_];\W:[^\w]

有了元字符,我們?cè)賮?lái)改良下我們的這個(gè)正則表達(dá)式。

/^1\d\d\d\d\d\d\d\d\d\d$/
/^1\d\d\d\d\d\d\d\d\d\d$/.test("13512345678"); //true

那么問(wèn)題又來(lái)了,這個(gè)改良過(guò)的正則表達(dá)式,還是不夠簡(jiǎn)練,里面有10個(gè)\b,怎么樣寫(xiě)的更加簡(jiǎn)練些呢,這個(gè)時(shí)候我們就要用到第四個(gè)知識(shí)點(diǎn)——量詞。

量詞

什么是量詞呢,就是出現(xiàn)的次數(shù)。

  • {m,n}:m到n次

  • *:{0,}表示出現(xiàn)0次到無(wú)窮次

  • ?:{0,1}表示出現(xiàn)0次到1次

  • +:{1,}表示出現(xiàn)1次到 無(wú)窮次

看栗子

/https?:/.test("http://www.163.com"); //true
/https?:/.test("https://www.163.com"); //true
/https?:/.test("httpss://www.163.com"); //true

現(xiàn)在,有了這個(gè)量詞以后,我們的匹配手機(jī)號(hào)碼的表達(dá)式也可以調(diào)整改良下。

/^1\d{10}$/
/^1\d{10}$/.test("13512345678");  //true

講完了匹配手機(jī)號(hào)碼的正則表達(dá)式,我們?cè)賮?lái)看看,正則表達(dá)式中還有哪些知識(shí)點(diǎn)需要講。

轉(zhuǎn)義符

什么是轉(zhuǎn)義符,就是需要匹配的字符是元字符。比如:

/^http:\/\//

/@163\.com$/

接下來(lái)再看一個(gè)需求,比如我們想要匹配網(wǎng)易的郵箱,但是比如別的郵箱都是報(bào)false的,這個(gè)怎么處理呢。網(wǎng)易郵箱有@126.com|@163.com|@188.com這幾種。

要怎么寫(xiě)呢,做這個(gè)需求的時(shí)候,我們就要用到正則表達(dá)式中另一個(gè)知識(shí)點(diǎn)——多選分支。

/thi(c|n)k/===/thi[cn]k/
/\.(png|jpg|jpeg|gif)$/

照著上面的模樣,我們可以試試怎么寫(xiě)匹配網(wǎng)易郵箱的正則表達(dá)式。

/(.+)@(126|163|188)\.com$/

下面要說(shuō)的一個(gè)復(fù)雜的實(shí)例:

假如我們要在這上面的地址的地方,獲取它子串的內(nèi)容,要怎么辦呢,這就要用到正則表達(dá)式,又一個(gè)知識(shí)點(diǎn)——捕獲、

捕獲

捕獲要做的事情呢,就是保存匹配到的字符串,日后再用。那么捕獲的語(yǔ)法呢:

  • ():捕獲
  • (?:):不捕獲
    比如上面的例子中有用到()的:
/(.+)@(126|163|188)\.com$/

捕獲的東西就會(huì)放在()中,那么要怎么使用捕獲到的東西呢?

str.match(regexp);

用這個(gè)來(lái)獲取匹配的字符串。

var url="http://blog.163.com/album?id=1#comment";
var reg=/^(https?:)\/\/(^\/)+(\/[^\?]*)?(\?[^#]*)?(#.*)?$/;
var arr= url.match(reg);
var protocol=arr[1];
var host=arr[2];
var pathname=arr[3];
var search=arr[4];
var hash=arr[5];



再來(lái)看下一個(gè)需求:

要把5替換成5.00的價(jià)格形式的,怎么替換呢,就要用到下面的一個(gè)方法:

str.replace(regexp/substr,replacement)

看實(shí)例代碼:

var str="the price of tomato is 5,the price of apple is 10.";
str.replace(/(\d+)/g,"$1.00");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,772評(píng)論 3 422
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,947評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,201評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,960評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,350評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,549評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,104評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,914評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,089評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,340評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,753評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,007評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,834評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,106評(píng)論 2 375

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

  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識(shí)依舊是別人的,自己卻什么都沒(méi)獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,040評(píng)論 0 20
  • 溫馨提示:文章很長(zhǎng)很長(zhǎng),保持耐心,必要時(shí)可以跳著看,當(dāng)然用來(lái)查也是不錯(cuò)的。 正則啊,就像一座燈塔,當(dāng)你在字符串的海...
    Stinson閱讀 4,371評(píng)論 2 82
  • 轉(zhuǎn)自: JS正則表達(dá)式一條龍講解,從原理和語(yǔ)法到JS正則、ES6正則擴(kuò)展,最后再到正則實(shí)踐思路 溫馨提示:文章很長(zhǎng)...
    前端渣渣閱讀 1,826評(píng)論 1 32
  • 正則表達(dá)式到底是什么東西?字符是計(jì)算機(jī)軟件處理文字時(shí)最基本的單位,可能是字母,數(shù)字,標(biāo)點(diǎn)符號(hào),空格,換行符,漢字等...
    獅子挽歌閱讀 2,161評(píng)論 0 9
  • 夕陽(yáng)西下白鷺歸 淺搖羽扇念卿回 落紅流水愁相對(duì) 楊柳青青碧波碎 黃花知倦蝶厭飛 懷舊愿為陳香醉
    秋之楓葉閱讀 258評(píng)論 0 0