2017-02-13 41 views
0

很明顯,我不是一個正則表達式專家,但通過搜索字符串,我爲URL字段做了以下正則表達式工作。正則表達式:不允許在網站url字段中使用questionmark

(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))? 

但我遇到的問題是,人們在我想阻止的url字段中添加refferal ID。

例如一個網址,如:

http://www.website.com/subdir/foo?item=234 

如若問號之前被轉換成的一切:

http://www.website.com/subdir/foo 

我認爲部分[\w#!:.?+=&%@!\-\/]應持有此字符串,並通過改變部分嘗試各種選項[^?]*用於阻止?,導致[\w#!:.^?+=&%@!\-\/]但無法找到正確的序列。

是這樣的可能嗎?

碧玉

+0

你會破壞許多其他有效的網頁這樣做,但你可以刪除''從'[\ W#!......]'部分。 –

+0

然後,你的'\ S +'太貪婪了,只能隨便找到它可能找到的東西。您需要更好的方式來驗證字符串的域名部分。 –

+0

爲什麼不只是尋找「?」然後轉儲所有內容? ^(。*)\?。* >> $ 1 – user1612272

回答

0

如果要刪除打上一個問號網址選項,你可以只提取問號面前的一切,只使用這一部分。

如果你想用正則表達式來做到這一點,你可以用下面的模式:

(https?:\/\/.*?)(?:\?.*)?$ 

,然後尋找第一組$1

  • (https?:\/\/.*?)比賽組http://https://其次通過任何字符儘可能少的字符
  • (?:\?.*)?它後面跟着一個可選的非捕獲((?:))(你不想匹配這個東西)後面帶有問號和任意數量的字符。
  • $標記字符串的結尾。這可以確保,即使沒有問號,第一個組也會擴展到字符串的末尾。

var regex = /(https?:\/\/.*?)(?:\?.*)?$/; 
 
var url1 = "http://www.google.com/test?parameter=1"; 
 
var url2 = "https://www.google.com/?"; 
 
var url3 = "https://google.com"; 
 

 
console.log(regex.exec(url1)[1]); 
 
console.log(regex.exec(url2)[1]); 
 
console.log(regex.exec(url3)[1]);

相關問題