成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

正則表達(dá)式中[]和和B的區(qū)別及匹配分析思路

DDreach / 3052人閱讀

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

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

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

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

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

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

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

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

輸出結(jié)果:

{ "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" }

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

也就是說連續(xù)的單詞數(shù)字_組合(上文提到的ecma部分的表格也對(duì)應(yīng)了這個(gè))都是一個(gè)單位, 他的兩側(cè)就是截?cái)? 除此之外的任何符號(hào)都會(huì)截?cái)嗨麄?

另外, 在MSDN文檔中, 它被歸為定位點(diǎn).

B - 一個(gè)非單詞邊界

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

模式: Bendw*

原字符串: end sends endure lender

匹配結(jié)果: endsender

關(guān)于正則個(gè)人的經(jīng)驗(yàn)

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

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

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

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

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

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

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

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

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

世界太小了, 又一次成功了, 緊接著是d, 看起來一一對(duì)應(yīng)上了

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

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

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

...(反復(fù)如上步驟)

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

兩道正則題目
自己折磨自己
題一: 找出符合規(guī)則的時(shí)間

匹配符合標(biāo)準(zhǔn)格式的時(shí)間. 這是內(nèi)容部分:

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

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

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

看起來應(yīng)該不是很復(fù)雜. 結(jié)果我寫了一天沒寫出來. 因?yàn)槲也恢涝趺刺蕹?b>26. 似乎無論怎么寫, 在26之間正向斷言始終都會(huì)匹配到6. ES5卻是不支持后行斷言(negative lookbehind)的, 據(jù)說ES6支持后行斷言了, 才得以解決這個(gè)問題, 然而不通過后行斷言來處理這個(gè)問題, 我始終沒有寫出來, 難道真的是實(shí)現(xiàn)不了?

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

/([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?:|(?
題二: 找出文件后綴名

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

可能有以下文件, 需要準(zhǔn)確獲取每個(gè)文件的文件類型, 例如:

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

期望:

.jpg
.png
.mp3
._unknow

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

改題目來源于前幾天同事發(fā)的一個(gè)javascript自驗(yàn)網(wǎng)站: ScriptOJ首頁的題目.

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/107148.html

相關(guān)文章

  • task0002(一)- JavaScript數(shù)據(jù)類型語言基礎(chǔ)

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

    elarity 評(píng)論0 收藏0
  • 60分鐘正則從入門到深入

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

    _ang 評(píng)論0 收藏0
  • 一行代碼實(shí)現(xiàn)一個(gè)簡單模板字符串替換

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

    Ryan_Li 評(píng)論0 收藏0
  • 一行代碼實(shí)現(xiàn)一個(gè)簡單模板字符串替換

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

    fyber 評(píng)論0 收藏0
  • 一行代碼實(shí)現(xiàn)一個(gè)簡單模板字符串替換

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

    NikoManiac 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<