a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > Regex > 正文

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

2020-03-16 20:51:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

首先我們必須要正確理解 . 的含義。其實(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、nodejs讀取文本等等。

提及多行文本的場(chǎng)景,我們很容易想到正則表達(dá)式的 m 模式(多行模式)。那么多行模式對(duì)我們今天討論的問題有影響嗎?我不是很確定。為什么不確定呢?有些人信誓旦旦地聲稱單行模式下 . 的含義與多行模式下不同,單選模式下等同于 [/w/W] 或者 [/s/S] ,而多行模式下會(huì)排除換行控制符。但據(jù)我試驗(yàn),以及參考MDN的說(shuō)法,這是不對(duì)的。的確有很多語(yǔ)言的正則表達(dá)式會(huì)有上述特性,但在javascript中我沒有看到,不知道會(huì)不會(huì)有瀏覽器方面的差異。那么多行模式對(duì)于javascript而言影響的是什么呢?我認(rèn)為僅僅是改變了 ^ 和 $ 標(biāo)識(shí)的含義:?jiǎn)涡心J较拢謩e表示整個(gè)字符串的開始的結(jié)尾;多行模式下表示每一行的開始和結(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" ,其中道理不言自明。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到正則表達(dá)式頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日韩精品小视频 | 欧美一级爆毛片 | 九一免费国产 | 日韩高清国产一区在线 | 亚洲视频免费网站 | 欧美国产在线观看 | 亚洲视频中文字幕 | 99国产在线观看 | 男女靠逼的视频 | 爱爱免费视频网站 | 欧美成人手机在线 | 91社区在线视频 | 亚洲一区二区三区免费视频 | 国产精品午夜电影 | 国产成人精品久久二区二区91 | 国产精品久久久久久久久久东京 | 精品视频在线观看 | 国产精品视频免费 | 欧美日韩高清一区 | 国产成人在线免费观看 | 9999国产精品欧美久久久久久 | 制服 丝袜 综合 日韩 欧美 | 一区二区三区精品视频 | 日韩另类 | 久久久久性视频 | 中文字幕欧美日韩 | 日日夜夜综合 | 久久综合九九 | 国产自在现线2019 | 国产美女精品 | 欧美日韩精品久久久久 | 四虎网址| 一级片在线观看 | 国产精品一级在线 | 国产伦精品一区二区三区四区视频 | 欧美日韩免费一区二区三区 | 国产91精品一区二区麻豆网站 | 久久久久国产一区二区三区 | 国产精品高潮呻吟久久久 | 免费国产视频在线观看 | 久久免费在线观看 |