Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Regexp在文件结束前添加和删除文本_Javascript_Jquery_Regex - Fatal编程技术网

Javascript Regexp在文件结束前添加和删除文本

Javascript 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”,其中包含: 并用以下方法将其移除: 因此,要设置适当的悬停:

我想更改图像的src

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"