2017-10-14 61 views
0

我想匹配的URL使用正則表達式嘗試使用正則表達式

https?:\/\/.*\..* 

但無法瞭解如何在網址後,會出現一個空格結束比賽,以匹配URL。

例如在下面的圖片中,對於最後的匹配,我希望它在結束之前結束。 但似乎沒有工作。

您還可以解釋爲什麼在末尾添加\ b(單詞邊界)不起作用嗎?

enter image description here

+0

https://www.regexpal.com/94502 – jmargolisvt

回答

1

看看下面用懶惰和非捕獲組的最後一個空白的解決方案:

在這裏尋找更好的正則表達式」 What is the best regular expression to check if a string is a valid URL?

//well let us dive into this: 
 

 
var matches = document.querySelector("pre").textContent.match(/https?:\/\/.*\..*/g); 
 

 
console.log(matches); 
 

 
/* 
 
your regex does the following 
 
search for http:// or https:// 
 
then you want to search for every character that is not a newline until you find a dot 
 
after that you simply search for everything that is not a newline. 
 

 

 
you need lazy and a non-capturing group, lazy is ? - (?=\s) 
 
*/ 
 

 
var matches2 = document.querySelector("pre").textContent.match(/https?:\/\/.+?\..+?(?=\s)/g); 
 
console.log(matches2);
<pre> 
 
[email protected] 
 

 
http://foo.co.uk/ 
 
http://regexr.com/foo.html?q=bard 
 
https://mediatemple.net jhjhjhjhjhjh 
 
</pre>

+0

能否請您解釋一下爲什麼\ b沒有按不工作? –

+0

因爲'\ b'在一個單詞boundery上停了下來,'.'就是這樣一個boundery。 – Mouser

+0

是不是空間被視爲字邊界? –

3

只需使用\S

https?:\/\/.*\.\S* 

\S表示:匹配的一切,是不是空間字符(空格,製表符delim ..)

+0

你能解釋爲什麼\ b不能工作? –