javascript - 有段正規搞不定,求幫忙
天蓬老师
天蓬老师 2017-05-19 10:31:59
0
2
414

程式碼:

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(2)
阿神

大兄弟,你的正規表示式寫的有問題,首先正則表達式的構造有兩種形式,一種是你這樣,另一種是 /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"
黄舟

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板