談?wù)務(wù)齽t表達(dá)式中的“.”

寫于2015年5月7日捻爷,可能已過(guò)時(shí),請(qǐng)謹(jǐn)慎參考份企。

今天分享一個(gè)小的知識(shí)點(diǎn),一個(gè)正則表達(dá)式方面的很容易被人忽視的坑巡莹。

我們知道司志,正則表達(dá)式中,可以用.表示任意單個(gè)字符降宅,但在underscore和jquery的源代碼中骂远,我們可以看到,這些著名類庫(kù)的代碼中腰根,經(jīng)常并不是用.來(lái)表示任意字符激才,而是使用[\w\W]或者[\s\S]。乍一看,好像表達(dá)的含義是一樣的瘸恼,可是為什么放著簡(jiǎn)單的方法不用劣挫,而去多繞個(gè)圈子?今天就簡(jiǎn)單說(shuō)說(shuō)這個(gè)問(wèn)題东帅。

首先我們必須要正確理解.的含義压固。其實(shí)說(shuō)它表示任意單個(gè)字符,可能會(huì)讓人產(chǎn)生誤解靠闭,必須要強(qiáng)調(diào)一下帐我,這個(gè)“任意單個(gè)字符”不包括控制換行的字符,也就是不包含\n愧膀、\r拦键、\u2028\u2029這幾個(gè)字符。而\W\s中是能夠包含這些字符的檩淋。那個(gè)這兩種寫法的差異也就很清晰了芬为,就是能否匹配到幾個(gè)換行控制符的差異。

那么在什么時(shí)候我們需要考慮這幾個(gè)換行控制符呢狼钮?當(dāng)要處理的字符串可能包含換行時(shí)碳柱。這樣的情景太多了,處理html字符串熬芜、處理template莲镣、Node.js讀取文本等等。

提及多行文本的場(chǎng)景涎拉,我們很容易想到正則表達(dá)式的m模式(多行模式)瑞侮。那么多行模式對(duì)我們今天討論的問(wèn)題有影響嗎?我不是很確定鼓拧。為什么不確定呢半火?有些人信誓旦旦地聲稱單行模式下 . 的含義與多行模式下不同,單選模式下等同于[\w\W]或者[\s\S]季俩,而多行模式下會(huì)排除換行控制符钮糖。但據(jù)我試驗(yàn),以及參考MDN的說(shuō)法酌住,這是不對(duì)的店归。的確有很多語(yǔ)言的正則表達(dá)式會(huì)有上述特性,但在javascript中我沒(méi)有看到酪我,不知道會(huì)不會(huì)有瀏覽器方面的差異消痛。那么多行模式對(duì)于javascript而言影響的是什么呢?我認(rèn)為僅僅是改變了^$標(biāo)識(shí)的含義:?jiǎn)涡心J较露伎蓿謩e表示整個(gè)字符串的開(kāi)始的結(jié)尾秩伞;多行模式下表示每一行的開(kāi)始和結(jié)尾逞带。而不管多行模式還是單行模式,我認(rèn)為.都是不包含換行控制字符的纱新,等價(jià)于[^\n\r\u2028\u2029]展氓。

再多延伸一點(diǎn)點(diǎn),對(duì)于現(xiàn)代瀏覽器怒炸,可以直接用[^]來(lái)匹配任意字符的带饱。

例子不想寫了,有興趣的可以自己試驗(yàn)一下阅羹,分別用/.*/g勺疼、/^.*$/g/.*/gm捏鱼、/^.*$/gm來(lái)匹配一下"abc\nedf"执庐,其中道理不言自明。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末导梆,一起剝皮案震驚了整個(gè)濱河市轨淌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌看尼,老刑警劉巖递鹉,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異藏斩,居然都是意外死亡躏结,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門狰域,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)媳拴,“玉大人,你說(shuō)我怎么就攤上這事兆览∏龋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵抬探,是天一觀的道長(zhǎng)子巾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)小压,這世上最難降的妖魔是什么砰左? 我笑而不...
    開(kāi)封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮场航,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘廉羔。我一直安慰自己溉痢,他們只是感情好僻造,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著孩饼,像睡著了一般髓削。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镀娶,一...
    開(kāi)封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天立膛,我揣著相機(jī)與錄音,去河邊找鬼梯码。 笑死宝泵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轩娶。 我是一名探鬼主播儿奶,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鳄抒!你這毒婦竟也來(lái)了闯捎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤许溅,失蹤者是張志新(化名)和其女友劉穎瓤鼻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贤重,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茬祷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了游桩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牲迫。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖借卧,靈堂內(nèi)的尸體忽然破棺而出盹憎,到底是詐尸還是另有隱情,我是刑警寧澤铐刘,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布陪每,位于F島的核電站,受9級(jí)特大地震影響镰吵,放射性物質(zhì)發(fā)生泄漏檩禾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一疤祭、第九天 我趴在偏房一處隱蔽的房頂上張望盼产。 院中可真熱鬧,春花似錦勺馆、人聲如沸戏售。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灌灾。三九已至搓译,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锋喜,已是汗流浹背些己。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘿般,地道東北人段标。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像博个,于是被迫代替她去往敵國(guó)和親怀樟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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