2015-04-05 41 views
1

我有一個錨點,我想用JavaScript/jQuery動態更改href中的參數。業務案例是我打電話給我的Rails控制器上的bit.ly API,在url =後縮短substring的子字符串,並將較小的url重新插入到Twitter和LinkedIn共享中。更改Twitter或Linkedin內的參數

我想用正則表達式來抓取我想改變的參數,然後重新插入新參數到字符串中的相同位置。

這是原始的href,但正則表達式我沒有處理url = Twitter和Linkedin參數中有多個&符號(子參數)的情況。

var hrefattribute = "https://twitter.com/share?" 
    + "url=http://192.168.0.100:3001/hbookmarks/pubhistoryfortoday?currentdate=2015-04-04&username=soysoys&text=open the bookmarks I clicked on 2015-04-04." 

我的JS代碼,以便獲得url =參數:(我是從另一個文章#1的代碼 - 抱歉,我不記得在這裏鏈接到它)

var hrefattribute_url = hrefattribute.match(/([\?&])(url=)[^&#]*/)[0]; 

我的代碼重新插入更新URL =參數:

$('.pubhistoryfortoday_share').prop('href', function(i, action){ 
    return action.replace(/([\?&])(url=)[^&#]*/, '$1$2' + short_url); 
}); 

回答

1

它看起來像您使用的是全hrefattribute屬性值,對不對?然後,你可以使用下面的正則表達式,將整個URL匹配的屬性值界定報價:

^(.*?)([\?&]url=)[^&#]*(?:[&#][^&#]*)?(&[^'"]*)

demo here

var re = /^(.*?)([\?&]url=)[^&#]*(?:[&#][^&#]*)?(&[^'"]*)/; 
 
var str = 'https://twitter.com/share?url=http://192.168.0.100:3001/hbookmarks/pubhistoryfortoday?currentdate=2015-04-04&username=soysoys&text=open the bookmarks I clicked on 2015-04-04.'; 
 
var m; 
 
if ((m = re.exec(str)) !== null) { 
 
    document.getElementById("res").innerHTML = m[1] + m[2] + 'http://bit.ly/12345678' + m[3] 
 
}
<div id="res"/>

+0

感謝。我不是RegEx專家,它正在慢慢回來。但我不想縮短&text =及以後,只有url =部分。在我的初始文章中,正則表達式只在url = substring中的第一個Ampersand處停止,並且我需要它一直到username = mtm的末尾。謝謝。 – kram1021 2015-04-05 15:23:25

+0

因此,問題在於您還希望將其他人造對象網址連接到縮短的網址? – 2015-04-05 15:26:29

+0

是的。我應該把最終狀態href放在原始文章中。所以我希望它看起來像這樣:'「https://twitter.com/share?url=http://bit.ly/12345678&text=打開我點擊的書籤2015-04-04。」' – kram1021 2015-04-05 15:47:32