字符串替换替换错误的部分

时间:2015-07-25 13:40:05

标签: javascript jquery regex

我有一个带有两个箭头的图像,可以增加/减少图像文件名。这是左箭头代码:

$('#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('/')?

我整天都在编码,此刻我的大脑刚刚被炸掉了,所以我要休息一下,喝一杯茶。

希望你们其中一位出色的人会指出我出错的地方很明显。

目前一切看起来都像乱七八糟的数字给我,我看不到树木的木头!

3 个答案:

答案 0 :(得分:1)

您需要使用基于前瞻性的正面正则表达式。现在,这将增加仅在扩展之前存在的数字。

$('#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}));
} 
});

答案 1 :(得分:1)

在这种情况下你真的不需要正则表达式:

A

答案 2 :(得分:0)

使用.match RegExp

尝试/\d+\./

var url = "images/h4/1.jpg";
console.log(parseInt("images/h4/1.jpg".match(/\d+\./), 10));