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