摘要:復(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é)果: ends和ender
關(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. 似乎無論怎么寫, 在2和6之間正向斷言始終都會(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
摘要:不過讓流行起來的原因應(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í)行代碼...
摘要:正則表達(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ì)于我來說一直像黑暗魔法一樣的存...
摘要:需求描述實(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í)還可以...
摘要:需求描述實(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í)還可以...
摘要:需求描述實(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í)還可以...
閱讀 2655·2021-11-24 10:29
閱讀 2736·2021-09-24 09:48
閱讀 5911·2021-09-22 15:56
閱讀 3324·2021-09-06 15:00
閱讀 2776·2019-08-30 15:54
閱讀 815·2019-08-30 13:48
閱讀 3078·2019-08-30 11:17
閱讀 3507·2019-08-29 11:20