Javascript Regexp在文件结束前添加和删除文本
我想更改图像的srcJavascript Regexp在文件结束前添加和删除文本,javascript,jquery,regex,Javascript,Jquery,Regex,我想更改图像的src var string = "/images/myimage.png"; 在鼠标悬停时,我想将_hover添加到myimage(“/images/myimage_hover.png”) 在mouseout上,我想删除“\u hover” 有人对此有好的Regexp吗 感谢您编辑oops-对于标记,它是“src”,而不是“href” 您可以通过以下方式获取URL本身: 获得该选项后,您可以添加“\u hover”,其中包含: 并用以下方法将其移除: 因此,要设置适当的悬停:
var string = "/images/myimage.png";
在鼠标悬停时,我想将_hover添加到myimage(“/images/myimage_hover.png”)
在mouseout上,我想删除“\u hover”
有人对此有好的Regexp吗
感谢您编辑oops-对于
标记,它是“src”,而不是“href”
您可以通过以下方式获取URL本身:
获得该选项后,您可以添加“\u hover”,其中包含:
并用以下方法将其移除:
因此,要设置适当的悬停:
imgUrl = imgUrl.replace(/_hover\.png/, '.png');
我在第一个函数中加入了一个测试,试图阻止“foo\u hover\u hover.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');
}
);
更新:同时检查其他答案的表达,有些答案更复杂;)但是使用带有回调的
attr
是一种很好的方法 无论您的文件扩展名是什么,这里都有一个解决方案:
$('#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', '');
});
});
演示:
试试这个:
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>
您是否考虑过不使用文件名存储扩展名?如果您的格式是一致的,或者如果您单独存储扩展,您可以使您的生活更轻松。这样,如果你的命名方案改变,你的正则表达式被破坏的几率就会降低
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用于
\u hover
测试。可能没有必要,但应该意识到这种可能性。@Felix King-我认为打赌浏览器在跟踪鼠标移动方面总是100%完美是相当冒险的:-)感谢您记住,对于
标记而言,它是“src”,而不是“href”:+1,因为它使用attr()和函数参数,而不是调用attr()两次读写。这个正则表达式可以更简单,只要replace(/(\.[^.]+)$/,'u hover$1')代码>太好了!谢谢我将您的解决方案用于ThiefMaster的RegexpBtw,“I”是做什么的?函数(i,val)+1只为“喵喵”一声:P-为interwebz更多的猫(当然还有更多的奶酪汉堡)谢谢!我将Felix Kling的解决方案与您的Regexp一起使用。很好!
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>
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
i.e.
var str = "/images/myimage" + (is_selected ? "_hover" : "") + ".png"