麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > regex > 正文

談談正則表達式中的句號.

2020-01-20 21:59:47
字體:
來源:轉載
供稿:網友

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

首先我們必須要正確理解 . 的含義。其實說它表示任意單個字符,可能會讓人產生誤解,必須要強調一下,這個“任意單個字符”不包括控制換行的字符,也就是不包含 /n /r /u2028 或/u2029 這幾個字符。而 /W 和 /s 中是能夠包含這些字符的。那個這兩種寫法的差異也就很清晰了,就是能否匹配到幾個換行控制符的差異。

那么在什么時候我們需要考慮這幾個換行控制符呢?當要處理的字符串可能包含換行時。這樣的情景太多了,處理html字符串、處理template、nodejs讀取文本等等。

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美乱论| 色污视频| 日韩精品中文字幕一区二区 | 日韩精品中文字幕在线播放 | 2019亚洲日韩新视频 | 久久久av亚洲男天堂 | 欧美一级毛片一级毛片 | 中文字幕一区久久 | 羞羞视频免费视频欧美 | 免费观看黄色片视频 | 免费在线看黄 | 久久久久久久久久性 | 久久99亚洲精品 | 色欲香天天天综合网站 | 宅男视频在线观看免费 | 精品久久中文网址 | 操操操日日日干干干 | 黄色av片在线观看 | 亚洲少妇诱惑 | 欧美大穴 | 久久91精品国产91久久yfo | 欧美a级在线免费观看 | jj视频在线播放 | 国产1区2区3区中文字幕 | 欧美一级性 | 日本黄色一级视频 | 黄网站在线观 | 久久一区国产 | 91,视频免费看 | 久久成人免费观看 | 欧美日韩一区,二区,三区,久久精品 | 极品美女一级毛片 | 国产中文99视频在线观看 | 国产成年人小视频 | 欧美乱淫 | 亚洲资源在线播放 | 成人毛片100部免费观看 | 欧美wwwsss9999| 爱操成人网| 色的综合| 欧美日韩在线播放 |