最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年06月01日 23:08:58   投稿:mdxy-dxy  
好久沒更新內(nèi)容了,今天分享一個(gè)小的知識點(diǎn),一個(gè)正則表達(dá)式方面的很容易被人忽視的坑,需要的朋友可以參考下

我們知道,正則表達(dá)式中,可以用 . 表示任意單個(gè)字符,但在underscore和jquery的源代碼中,我們可以看到,這些著名類庫的代碼中,經(jīng)常并不是用 . 來表示任意字符,而是使用 [\w\W] 或者[\s\S] 。乍一看,好像表達(dá)的含義是一樣的,可是為什么放著簡單的方法不用,而去多繞個(gè)圈子?今天就簡單說說這個(gè)問題。

首先我們必須要正確理解 . 的含義。其實(shí)說它表示任意單個(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、nodejs讀取文本等等。

提及多行文本的場景,我們很容易想到正則表達(dá)式的 m 模式(多行模式)。那么多行模式對我們今天討論的問題有影響嗎?我不是很確定。為什么不確定呢?有些人信誓旦旦地聲稱單行模式下 . 的含義與多行模式下不同,單選模式下等同于 [\w\W] 或者 [\s\S] ,而多行模式下會(huì)排除換行控制符。但據(jù)我試驗(yàn),以及參考MDN的說法,這是不對的。的確有很多語言的正則表達(dá)式會(huì)有上述特性,但在javascript中我沒有看到,不知道會(huì)不會(huì)有瀏覽器方面的差異。那么多行模式對于javascript而言影響的是什么呢?我認(rèn)為僅僅是改變了 ^ 和 $ 標(biāo)識的含義:單行模式下,分別表示整個(gè)字符串的開始的結(jié)尾;多行模式下表示每一行的開始和結(jié)尾。而不管多行模式還是單行模式,我認(rèn)為 . 都是不包含換行控制字符的,等價(jià)于 [^\n\r\u2028\u2029] 。

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

例子程序不想寫了,有興趣的可以自己試驗(yàn)一下,分別用 /.*/g 、 /^.*$/g 、 /.*/gm 、/^.*$/gm 來匹配一下 "abc\nedf" ,其中道理不言自明。

相關(guān)文章

最新評論

大关县| 汾阳市| 乐陵市| 莱州市| 宁陕县| 宜兰市| 萝北县| 郁南县| 长乐市| 马尔康县| 奈曼旗| 抚松县| 通榆县| 江阴市| 大渡口区| 息烽县| 梧州市| 团风县| 绥中县| 邢台县| 芒康县| 潮安县| 进贤县| 门头沟区| 泊头市| 曲松县| 金乡县| 辉县市| 永城市| 嘉义市| 广宁县| 十堰市| 两当县| 花垣县| 昌平区| 驻马店市| 启东市| 芦山县| 闸北区| 蒲江县| 页游|