当前位置: 代码迷 >> JavaScript >> 字符串替换替换错误的部分
  详细解决方案

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

热度:46   发布时间:2023-06-03 17:52:01.0

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

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

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

希望你们中令人惊讶的人中的一员能指出我犯错的地方。

目前,对我来说,所有东西都像是乱七八糟的数字,我看不到树木的木头!

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

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

尝试将.matchRegExp /\\d+\\./


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

  相关解决方案