程式碼:
var match1 = new RegExp('\S*//weibo\.com/p/\S*');
var match2 = new RegExp('\S*//weibo\.com/p/\S+');
match1.test('http://weibo.com/p/12345/myfollow?relate=fans#place');//true
match2.test('http://weibo.com/p/12345/myfollow?relate=fans#place');//false
有點懵逼,match2為什麼是false,以及match1到底配對上了什麼鬼
大兄弟,你的正規表示式寫的有問題,首先正則表達式的構造有兩種形式,一種是你這樣,另一種是
/abc/g
。看你的意思,你的正規表示式應該這樣寫:
你的少了反斜杠,轉義失敗
為什麼?因為依照你的正規表示式,實際上:
接著就是
*
和+
的差別了,所以第一個為 true,第二個為 false。建議構造正規表示式的時候用兩個斜杠,這樣可以不用轉義:
match1:s匹配0個多1個或多個空格,//這個的話最好轉義一下使用//這樣匹配的才是'/',.這個匹配的是'.',如果沒有反斜槓是匹配任意字符,最後一個s匹配0個多1個或多個空格。
match2:只有最後一個不一樣,s+,一個或多個空格,但是你的字符串明顯在p之後沒有空格所以false