2011-07-08 230 views
1

解析參數我用正則表達式,總的小白,雖然我努力,我不能創建正確的正則表達式來執行以下操作:正則表達式從URL

  1. 取URL並檢查是否有一個'? '之後是數字不同的數字。
  2. 如果匹配是正確的,則獲得'?'符號後的數字
  3. 將該數字與其他數字進行交換。

所以我們可以說,我們有這個網址:

http://website.com/avatars/avatar.png?56

我們採取 '56' 並將其更改爲 '57'。

我對搜索的正則表達式如下,我不知道這是否是正確的:

\?[0-9]+ 

但我不知道如何採取?了。我應該把它從字符串中扔掉,而忘記在這裏使用正則表達式嗎?然後替換部分是唯一剩下的部分。

+1

有沒有使用正則表達式具體原因是什麼?你可以使用'location'對象,分別使用'location.search'。 –

+0

你的正則表達式是一個好的。你只需要重新加入你拿出的'?'中。請參閱下面的答案。 – ridgerunner

回答

1

你原來的正則表達式將工作得很好,只是添加回到?你正在服用了像這樣:

var newnum = 57; 
url = url.replace(/\?[0-9]+/, '?'+ newnum); 
0

非常空置向下的方法:

$('#parse').click(function(e){ 
    var fromUrl = $('#from-url').val(); 
    var newNum = parseInt($('#new-number').val(), 10); 

    var urlRE = /(?!\?)(\d+)$/; 
    if (urlRE.test(fromUrl)){ 
     $('#result').text(fromUrl.replace(urlRE, newNum)); 
    }else{ 
     $('#result').text('Invalid URL'); 
    } 
}); 

DEMO

有沒有奢侈的檢驗和,錯誤檢查等Fromt這裏,使用window.location或包含字符串網址,如果需要。


的爆發給一個函數(demo):「?」

// Call this to replace the last digits with a new number within a url. 
function replaceNumber(url, newNumber){ 
    // regex to find (and replace) the numbers at the end. 
    var urlRE = /\?\d+$/; 

    // make sure the url end in a question mark (?) and 
    // any number of digits 
    if (urlRE.test(url)){ 
     // replace the ?<number> with ?<newNumber> 
     return url.replace(urlRE, '?'+newNumber); 
    } 

    // invalid URL (per regex) just return same result 
    return url; 
} 

alert(replaceNumber('http://website.com/avatars/avatar.png?56', 57)); 
+0

表達式'/(?!\?)(\ d +)$ /'相當於'/(\ d +)$ /'(負數的前瞻斷言將在數字的位置爲真) – ridgerunner

+0

@ridgerunner :他們想確認鏈接以問號**和**數字結尾。負面預測驗證了這一點。 (除非我誤解你在說什麼) –

+0

不,負面的lookahead沒有這樣的事情。它是在第一個數字之前緊接的零寬度斷言 - 它不驗證第一個數字之前的字符是問號。請記住,前視和後視聲明是在_between_個字符之間應用的,在這種情況下,問號(如果其實際存在)和第一個數字之間。 – ridgerunner

0

我不是正則表達式的專家,但我認爲你可以使用一個lookaround忽略

(?<=?)([0-9]+) 

這應該給你在第一場比賽

+0

這是非常簡單的,你可以使用() 拆分匹配的值在我的文章上面有一個例子... –

+0

Javascript沒有向後看。 – ridgerunner

+0

@ridgerunner or right,damn – ianbarker

3

你的電話號碼試試這個:

var url = "http://website.com/avatars/avatar.png?56"; 
var match = url.match(/\?(\d+)/); 
if(match != null) { 
    url = url.replace(match[1], "new number"); 
} 
+0

如果URL是:''http://website.com/path56/avatar.png?56「'會發生什麼? – ridgerunner

+0

url被替換爲http://website.com/path56/avatar.png?new號碼 –

+0

實際上,no,'matches [1]'將會是''56「',replace語句實際上是:'url = url.replace('56',「new number」);'和URL值最終爲:'website.com/pathnew number/avatar.png?56'。 – ridgerunner

0

你可以做到這一點沒有正則表達式。

var newNum = "57"; 
var url = "http://website.com/avatars/avatar.png?56"; 
var sUrl = url.split('?'); 
var rUrl = sUrl[0] + "?" + newNum; 
alert(rUrl); 
  1. 拆分在?
  2. 此的URL返回一個數組。
  3. 將陣列中的第一項和?和新號碼一起添加。

http://jsfiddle.net/jasongennaro/7dMur/

+0

如果有多個「?」字符怎麼辦? ('?'在'?query'和'#fragment'中都是有效的。)另外,如果在數字後面還有更多的查詢參數(或##片段)呢? – ridgerunner

+0

Thx @ridgerunner。我沒有考慮任何這些情況,因爲OP說'檢查它是否有?然後是數字不同的數字,他的例子是'http://website.com/avatars/avatar.png?56'我認爲這是非常明確的切入點。但同意,更復雜的網址需要別的東西。 –