国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

正則表達式中[]和和B的區別及匹配分析思路

DDreach / 2982人閱讀

摘要:復習正則表達式最近研究正好也有正則方面的內容看看有什么新特性順便又把精通正則表達式拿出來粗看了前面幾章節于是給自己出了幾道題還做了一點總結和和一般作為初學者看到這么多這些鬼都會頭大了下面我將詳細講解一下退格符另外其實我一直都搞不清楚匹配一

復習正則表達式
最近研究ES6, 正好ES6也有正則方面的內容, 看看有什么新特性, 順便又把精通正則表達式拿出來粗看了前面幾章節, 于是給自己出了幾道題. 還做了一點總結.
[]B
一般作為初學者看到這么多這些鬼都會頭大了. 下面我將詳細講解一下.
[] - 退格符

另外其實我一直都搞不清楚[]匹配一個退格(U+0008)是什么鬼. 似乎沒有人告訴我這個退格符長什么樣. 我也不知道那些各種轉載各種規則的人他們自己知不知道是啥... (難道就我不知道- -)

找了半天, 總算在MSDN: 正則表達式語言 - 快速參考找到了示例. 難道就是匹配用的嗎?, 當然很明顯的區別是, 它屬于字符轉義

 - 一個詞的邊界
MSDN: 匹配必須出現在 w(字母數字)和 W(非字母數字)字符之間的邊界上。

這個就很好理解了, 會寫先行斷言的我當然是知道了, 他不占用任何位置, 邊界一般都是單詞或數字兩邊, 更為具體的通過MDN的正則表達式文檔介紹內的注意有指引, 查到ecma文檔的15.10.2.6 Assertion中IsWordChar處, 不過由于個人能力有限, 對其理解如下:

通過這段代碼(正則表達式案例分析 (一) - (3) 單詞邊界):

"I"d prefer p2p O_O".replace(//g,function(){
  console.log(arguments)
});

輸出結果:

{ "0": "", "1": 0, "2": "I"d prefer p2p O_O" }
{ "0": "", "1": 1, "2": "I"d prefer p2p O_O" }
{ "0": "", "1": 2, "2": "I"d prefer p2p O_O" }
{ "0": "", "1": 3, "2": "I"d prefer p2p O_O" }
{ "0": "", "1": 4, "2": "I"d prefer p2p O_O" }
{ "0": "", "1": 10, "2": "I"d prefer p2p O_O" }
{ "0": "", "1": 11, "2": "I"d prefer p2p O_O" }
{ "0": "", "1": 14, "2": "I"d prefer p2p O_O" }
{ "0": "", "1": 15, "2": "I"d prefer p2p O_O" }
{ "0": "", "1": 18, "2": "I"d prefer p2p O_O" }

我們看到被斷掉(用|表示)的位置分別是:

也就是說連續的單詞數字_組合(上文提到的ecma部分的表格也對應了這個)都是一個單位, 他的兩側就是截斷. 除此之外的任何符號都會截斷他們.

另外, 在MSDN文檔中, 它被歸為定位點.

B - 一個非單詞邊界

前面說了這么多, B的理解就很輕松了, 一個非單詞邊界. 就不多說了, 看看MSDN的例子就清楚了.

模式: Bendw*

原字符串: end sends endure lender

匹配結果: endsender

關于正則個人的經驗

其實搞正則匹配, 我個人的從精通正則表達式書中閱讀后的感受就是, 匹配一定要一個個看, 慢慢的看, 比如上面這個例子, 我看看模式先是B, 然后再找原字符串, 依次步驟分析:

第一個e左邊(位置)是邊界不符合, 失敗看下一個字符

第二個n左邊(位置)符合B, 匹配成功, 再看模式B后面的e

模式B(位置)后面的e不匹配n, 失敗再看下一個字符d

第三個d左邊(位置)符合B, 匹配成功, 再看模式B后面的e

模式B(位置)后面的e不匹配第三個字母d, 失敗再看下一個字符 (這里是個空格啦?)

...(此處省略, 一直到send單詞)

(前面都不符合,當遇到了send), 經過一步步后移, 模式B(位置)走到了s右側, 成功! 此刻, 興奮的將模式移到第二個e

好巧, 模式中的e匹配到s后面的字符e, 再回到模式下一位n

世界太小了, 又一次成功了, 緊接著是d, 看起來一一對應上了

...(截至目前, Bend部分已經和sends中的end配上了, 可是還沒完呢)

模式d后面是w*, 我們回到原字符串部分send后面是s所以也成功

再看模式部分w*下一位, 碰到上面講的單詞邊界了( ?? ω ?? )y, 我們看看原字符串部分sends 這里的確被截斷了, 因此原字符串開始新一輪匹配

...(反復如上步驟)

最后就得出了匹配結果的兩組字符串了. 不知道我這樣講大家能不能理解, 或者說這種思路大家有沒有疑問和反對之處, 如果有希望大家留言?

兩道正則題目
自己折磨自己
題一: 找出符合規則的時間

匹配符合標準格式的時間. 這是內容部分:

now is 09:4 am test
now isx9:4 am test
now isx2:54 am test
now isA09:04 amwtest
now is_12:30 pm adsadadasda
now is 21:59 amdsadasdwq
now is 22:75 am_dsad21
now is 41:60 pm   dsadsad 
now is 26:23 am   dwadwq
now is 2a:23 am   dwadwq

期望結果(雖然24小時制后面存在[ap]m感覺還是不太合理.)

09:4 am
9:4 am
2:54 am
09:04 am
12:30 pm
21:59 am

看起來應該不是很復雜. 結果我寫了一天沒寫出來. 因為我不知道怎么剔除26. 似乎無論怎么寫, 在26之間正向斷言始終都會匹配到6. ES5卻是不支持后行斷言(negative lookbehind)的, 據說ES6支持后行斷言了, 才得以解決這個問題, 然而不通過后行斷言來處理這個問題, 我始終沒有寫出來, 難道真的是實現不了?

這是一個未能完美解決的其中一種寫法.

/([01]d|(?=2(?![4-9]))2d?|(?!2)d):(0?(?=d)[0-9]|[1-5][0-9])(s*[a|p]m)/gim

這是通過后行斷言的寫法:

/([01]d:|(?=2(?![4-9]))2d?:|(?
題二: 找出文件后綴名

再來看另一個, 獲取文件后綴名的正則寫法問題:

可能有以下文件, 需要準確獲取每個文件的文件類型, 例如:

a.jpg
hello world.png
c.c.mp3
_do_(it)._unknow

期望:

.jpg
.png
.mp3
._unknow

這個其實還算按比較簡單的了. 不過在我復習正則之前硬是想不起來咋寫, 稍微過了一遍再寫就容易多了. 正則寫法..(?!.).*.

改題目來源于前幾天同事發的一個javascript自驗網站: ScriptOJ首頁的題目.

關于題目部分, 不知道大家也有沒有更好的寫法, 也歡迎大家探討糾正哦?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107148.html

相關文章

  • task0002(一)- JavaScript數據類型語言基礎

    摘要:不過讓流行起來的原因應該是是目前所有主流瀏覽器上唯一支持的腳本語言。經過測試,數字字符串布爾日期可以直接賦值,修改不會產生影響。再考慮對象類型為或者的情況。對于結果聲明其類型。判斷對象的類型是還是,結果類型更改。 轉載自我的個人博客 歡迎大家批評指正 1. 第一個頁面交互 這里最需要學習的老師的代碼中,每一部分功能都由函數控制,沒有創建一個全部變量。且最后有一個函數來控制執行代碼...

    elarity 評論0 收藏0
  • 60分鐘正則從入門到深入

    摘要:正則表達式使用單個字符串來描述匹配一系列匹配某個句法規則的字符串。接下來,是在手機正則里面已經出現了。序列匹配而則匹配。分組與反向引用分組,又稱為子表達式。把正則表達式拆分成小表達式。 本文轉載自網絡。轉載編輯過程中,可能有遺漏或錯誤,請以原文為準。原文作者:水墨寒湘原文鏈接:https://juejin.im/post/582dfc... 正則表達式對于我來說一直像黑暗魔法一樣的存...

    _ang 評論0 收藏0
  • 一行代碼實現一個簡單模板字符串替換

    摘要:需求描述實現一個方法,將中的占位符用填充。通過文檔里面寫的,我們可以發現方法可以傳入回調函數,一個用來創建新子字符串的函數,該函數的返回值將替換掉第一個參數匹配到的結果。所以這行代碼的意思就很清楚,正則匹配到,分組獲取,然后把替換成。 起始 同許多初學 Javascript 的菜鳥一樣,起初,我也是采用拼接字符串的形式,將 JSON 數據嵌入 HTML 中。開始時代碼量較少,暫時還可以...

    Ryan_Li 評論0 收藏0
  • 一行代碼實現一個簡單模板字符串替換

    摘要:需求描述實現一個方法,將中的占位符用填充。通過文檔里面寫的,我們可以發現方法可以傳入回調函數,一個用來創建新子字符串的函數,該函數的返回值將替換掉第一個參數匹配到的結果。所以這行代碼的意思就很清楚,正則匹配到,分組獲取,然后把替換成。 起始 同許多初學 Javascript 的菜鳥一樣,起初,我也是采用拼接字符串的形式,將 JSON 數據嵌入 HTML 中。開始時代碼量較少,暫時還可以...

    fyber 評論0 收藏0
  • 一行代碼實現一個簡單模板字符串替換

    摘要:需求描述實現一個方法,將中的占位符用填充。通過文檔里面寫的,我們可以發現方法可以傳入回調函數,一個用來創建新子字符串的函數,該函數的返回值將替換掉第一個參數匹配到的結果。所以這行代碼的意思就很清楚,正則匹配到,分組獲取,然后把替換成。 起始 同許多初學 Javascript 的菜鳥一樣,起初,我也是采用拼接字符串的形式,將 JSON 數據嵌入 HTML 中。開始時代碼量較少,暫時還可以...

    NikoManiac 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<