慕森卡
2019-03-01 15:15:55
需要匹配以Chapter|Section開頭,以數字結尾的字符串如"Character 1","Section 132"但是只需要獲得尾部數字一開始用了這個正則/^(?<=(?:Chapter|Section)[ t]*)d+$)/發現匹配不成功/(?<=(?:Chapter|Section)[ t]*)d+$)/去掉^可以就可以匹配到數字了但是為什么加了^就不能匹配到了呢,是什么導致匹配失敗了呢求解
2 回答

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
?<=
是斷言,斷言常和零寬
這個詞一起出現,零寬斷言
是在文本的某個位置判斷這個位置前面或者后面的字符滿足或者不滿足一些條件,具體是向前還是向后,滿足還是不滿足就和具體的斷言類型相關了。需要特別注意的是,斷言只是匹配一個位置
,并不匹配
一個具體的字符,所以是零寬
。
/^(?<=(?:Chapter|Section)[ t]*)d+$)/
這個正則
首先匹配字符串的開始;
然后是一個斷言,這個斷言用于判斷該位置前面的字符滿足
Chapter|Section)[ t]*
,注意此時匹配的位置并未發生改變,還是在字符串的開始;然后匹配1到多個數字,注意開始匹配的位置還是在字符串的開始;
然后是字符串的結尾;
綜上,結合1,3和4,這個字符串就是由1到多個數字組成的;結合2,這個字符串開始的前面還需要匹配一些字符,這明顯是矛盾的,一個字符串的開始位置前面怎么還會有字符。所以這個正則什么也匹配不了。
/(?<=(?:Chapter|Section)[ t]*)d+$)/
去掉^以后,這個正則匹配成功的條件是在字符串中存在這樣一個位置,這個位置前面滿足Chapter|Section)[ t]*
,后面是1到多個數字,然后是字符串的結尾。
添加回答
舉報
0/150
提交
取消