我想編碼一個小部件,它將來自多個來源的推文整理爲一個練習(類似的東西存在here,但是a)在那裏提供的列表選項沒有加載任何我的列表, b)這是一個有用的學習練習!)。作爲其中的一部分,我想編寫一個正則表達式來替換Twitter的句柄('@'後跟字符),並附帶一個鏈接到用戶的Twitter頁面。但是,我不希望誤報,例如,推文中的電子郵件地址。Javascript正則表達式 - 僞造後視鏡上的意外行爲
所以,舉例來說,更換應派
Hey there @twitteruser, my email address is [email protected]
到
Hey there <a href="http://twitter.com/twitteruser">@twitteruser</a>, my email address is [email protected]
通過this question的指導下,這表明,我需要在Javascript中複製負查找屁股的一些方法,我寫以下代碼:
tweetText = tweetText.replace(/(\S)[email protected]([^\s,.;:]*)/ig, function($0, $1){
return $1 ? $0 + '@' + $1 : '<a href="http://www.twitter.com/' + $0 + '">@' + $0 + '</a>'
});
但是,在第e三元運算符的最後一部分被觸發,$ 0包含'@'符號。這對我來說是意外的 - 因爲'@'沒有被括在圓括號中,所以我期望$ 0匹配'([^ \ s,。;:] *)' - 也就是Twitter用戶的用戶名,沒有,'@')。我可以通過使用$ 0.substring(1)來獲得所需的功能,但我想進一步理解。
有人請指出我誤解了什麼嗎?我對正則表達式很陌生,從來沒有用Javascript寫過,也沒有用過負面看法。
'$ 0'一直是** **整體格局。 「$ 1」是第一個加括號的組,「$ 2」是第二個,等等。 – Pointy