问题描述
我有一个带有两边箭头的图像,以增加/减少图像文件名。 这是左箭头代码:
$('#sidebar-b').on("click", "#lar", function() {
var num = parseInt($('#main-img').attr('src').match(/(\d+)/)[1], 10);
if (num > 1) {
$('#main-img').attr('src', $('#main-img').attr('src').replace(/\d+/, function(val) {
return parseInt(val)-1
}));
}
});
和右边的很相似。
$('#sidebar-b').on("click", "#rar", function(){
var num = parseInt($('#main-img').attr('src').match(/(\d+)/)[1], 10);
if (num < $('#scroller').children().length) {
$('#main-img').attr('src',$('#main-img').attr('src').replace(/\d+/, function(val) {
return parseInt(val)+1
}));
}
});
当图像位于“ images /”中时效果非常好,但如果图像位于“ images / h3 /”或任何带数字的目录中,则每次单击箭头时,它只会增加目录名称(images / h3 / 1.jpg) ,images / h4 / 1.jpg等)
这显然是不好的。
尝试更改正则表达式,如果它选择了最后一个/或一个句点之后的字符,可能会更好。
甚至可以使用id.lastIndexOf('/')?
我整天都在编码,此刻我的大脑刚刚炸开,所以我要休息一下,喝杯茶。
希望你们中令人惊讶的人中的一员能指出我犯错的地方。
目前,对我来说,所有东西都像是乱七八糟的数字,我看不到树木的木头!
1楼
Avinash Raj
1
2015-07-25 13:43:45
您需要使用基于正向前瞻的正则表达式。 现在,这将增加仅在扩展名之前存在的数字。
$('#sidebar-b').on("click", "#lar", function(){
var num = parseInt($('#main-img').attr('src').match(/(\d+)(?=\.[^\/.]*$)/)[1], 10);
if (num > 1) {
$('#main-img').attr('src',$('#main-img').attr('src').replace(/\d+(?=\.[^\/.]*$)/,
function(val) { return parseInt(val)-1}));
}
});
2楼
Holt
1
已采纳
2015-07-25 13:50:24
在这种情况下,您实际上不需要正则表达式:
$('#sidebar-b').on("click", "#lar", function() {
var s = $('#main-img').attr('src') ;
var slashI = s.lastIndexOf('/'),
dotI = s.lastIndexOf('.') ;
var num = parseInt(s.substring(slashI + 1, dotI)) ;
if (!isNaN (num)) {
$('#main-img').attr('src', s.substring(0, slashI + 1) + (num - 1) + s.substring(dotI));
}
});
3楼
guest271314
0
2015-07-25 13:46:53
尝试将.match
与RegExp
/\\d+\\./
var url = "images/h4/1.jpg"; console.log(parseInt("images/h4/1.jpg".match(/\\d+\\./), 10));