搜尋

首頁  >  問答  >  主體

javascript - 有段正規搞不定,求幫忙

程式碼:

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到底配對上了什麼鬼

天蓬老师天蓬老师2776 天前417

全部回覆(2)我來回復

  • 阿神

    阿神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"

    回覆
    0
  • 黄舟

    黄舟2017-05-19 10:33:59

    match1:s匹配0個多1個或多個空格,//這個的話最好轉義一下使用//這樣匹配的才是'/',.這個匹配的是'.',如果沒有反斜槓是匹配任意字符,最後一個s匹配0個多1個或多個空格。
    match2:只有最後一個不一樣,s+,一個或多個空格,但是你的字符串明顯在p之後沒有空格所以false

    回覆
    0
  • 取消回覆