2011-01-31 114 views
3

我想更改圖像的src。正則表達式在文件結尾之前添加和刪除文本

var string = "/images/myimage.png"; 

鼠標懸停我想補充_hover到MYIMAGE( 「/images/myimage_hover.png」) 和鼠標移開時我想刪除 「_hover」。

有沒有人有這個好的正則表達式?

感謝

+0

+1只是爲了千鈞一髮「喵」:P - 在格蘭趣聞更多的貓(多cheezburgers過,當然) – ThiefMaster 2011-01-31 16:32:54

回答

5

一個想法:

$('#imageid').hover(function() { 
    $(this).attr('src', function(i, val) { 
     return val.replace(/^(.+)(\..+)$/, '$1_hover$2'); 
    }); 
}, 
function() { 
    $(this).attr('src', function(i, val) { 
     // assuming image names don't contain other `_hover` text 
     return val.replace('_hover', ''); 
    }); 
}); 

更新:另外,還要檢查其他答案的表情,有些更復雜;),但使用attr與回調是一個不錯的辦法。

4

編輯哎呀 - 這是 「SRC」 爲<img>標籤,而不是 「HREF」

那麼你可以得到URL本身:

var imgUrl = $('#imageId').attr('src'); 

一旦你得到那個,你可以把「_hover」與:

imgUrl = imgUrl.replace(/^(.*)\.png$/, "$1_hover.png"); 

刪除它:

imgUrl = imgUrl.replace(/_hover\.png/, '.png'); 

因此,要設置的東西,正確徘徊:

$('#imageId').hover(
    function() { 
    var $img = $(this); 
    if (!/_hover\.png$/.test($img.attr('src'))) 
     $img.attr('src', $img.attr('src').replace(/^(.*)\.png$/, '$1_hover.png'); 
    }, 
    function() { 
    var $img = $(this); 
    $img.attr('src', $img.attr('src').replace(/_hover\.png$/, '.png'); 
    } 
); 

我包含在第一功能的測試,試圖阻止「foo_hover_hover.png」從發生。

+0

您要添加到$只在字符串的結尾相匹配。 – ThiefMaster 2011-01-31 16:29:01

+0

是的,這是`.test`調用中的一個錯字 - 謝謝! – Pointy 2011-01-31 16:29:45

+0

用於`_hover`測試。可能沒有必要,但應該意識到這種可能性。 – 2011-01-31 16:36:36

3

下面是這不管你的文件擴展名是什麼有效的解決方案:

yourString = yourString.replace(/^(.+)\.([^.]+)$/, '$1_hover.$2'); // do this onmouseover 
yourString = yourString.replace(/^(.+)_hover\.([^.]+)$/, '$1.$2'); // do this onmouseout 

演示:

js> var yourString = 'meow.test.png'; 
js> yourString = yourString.replace(/\.([^.]+)$/, '_hover.$1'); 
meow.test_hover.png 
js> yourString = yourString.replace(/_hover\.([^.]+)$/, '.$1'); 
meow.test.png 
js> 
1

試試這個:

var testString = '"/images/myimage.png'; 
var regExp = /(.*)(\.)(.*)/g; 
var testHover = testString.replace(regExp, "$1_hover$2$3") 
alert(testHover); //Hover Image 
alert(testString.replace("_hover", ""));//Regular Image 
1

你有沒有考慮不存儲擴展與文件名?如果你的格式一致,或者如果你分開存儲擴展名,你可以讓你的生活更輕鬆。這樣,如果您的命名方案發生變化,您的正則表達式中斷的可能性就會降低。

i.e. 
var str = "/images/myimage" + (is_selected ? "_hover" : "") + ".png" 
相關問題