js正則先行斷言,

引子,以前學的正則大多都是比較死板的一個扣一個,有時候遇到難點的又是網上抄襲,很費事,費力。晚上無聊學習下正則。學習

首先看個例子,匹配一個密碼,可是必須有字母和數字,這是網上一個比較常見的案列;spa

/^(?=.*[0-9])(?=.*[a-z])[0-9A-Za-z]{6,12}$/
  1. 首先看?=這個表明什麼,(?=exp)也叫零寬度正預測先行斷言,它斷言自身出現的位置的後面能匹配表達式exp。好比\b\w+(?=ing\b),匹配以ing結尾的單詞的前面部分(除了ing之外的部分),如查找I'm singing while you're dancing.時,它會匹配sing和danc。這裏引自《正則30分鐘入門那篇課程》,http://deerchao.net/tutorials/regex/regex.htm#more
  2. 也就是說?=表示,他斷言他出現的位置能匹配後面的表達式,說直白一點,就是他這裏作了限制,後面的的表達式必須符合標註。那這裏作了什麼限制了?
  3. 這個地方有點難以理解,對我來講。看我的吧。他不能匹配到字符,他是匹配了爲位置,記住位置,$^這些都是在匹配位置;
  4. 完整的來說,我在開頭^緊跟着的位置,也能夠理解就在開頭,我發話了,後面的表達式,都配合下我演出 內容是  .*[0-9]我匹配任意字符,可是後面大家必定要給我來個數字必須有
  5. 都說了必須有數字嘛,有了就好了。可是這個範圍其實很大,離你匹配的東西差距很遠,因此大規則下還有小規則;.net

  6. [0-9A-Za-z]{6,12}$這是小規則,在知足大規則的前提下,我還具體約束一下。老大說了任意字符都匹配有字母和數字就行,可是我這裏必須匹配字母數字,還有個數要求。這是具體匹配。來看個例子,

    老大說了,要知足他的條件,我想在後面加個.com看看行不行,形如這種格式3d

  7. 這樣是不行的老大匹配的是位置,知足條件。你這是具體的東西啊,這裏必定要理清位置,和具體字符的關係。.com是實際要匹配的。那怎樣才行了?code

  8. 我如今寫的表達式知足老大的意思了吧,
  9.  這樣就好了,前面的斷言要知足,後面匹配實際的字符也要知足,一旦有衝突,就會匹配不了。htm

相關文章
相關標籤/搜索