【问题标题】:How to increment number in string using Javascript or Jquery如何使用 Javascript 或 Jquery 增加字符串中的数字
【发布时间】:2015-12-30 01:27:53
【问题描述】:

我的 textarea 的 id 是字符串并且是这种格式

id='fisher[27].man'

我想克隆 textarea 并增加数字并将 id 设为 fisher[28].man 并将其添加到现有 textarea。

有没有办法用 jquery 轻松完成这项工作?

var existingId = $("#at textarea:last").attr('id');
var newCloned = lastTextArea.clone();
var newId = newCloned.attr('id');
//add the index number after spliting
//prepend the new one to 
newCloned.prepend("<tr><td>" + newCloned + "</td></tr>");

必须有更简单的方法来克隆、获取索引号、拆分和前置。

我也尝试过使用正则表达式来做到这一点

var existingIdNumber = parseInt(/fisher[(\d+)]/.exec(s)[1], 10);

谁能帮我解决这个问题?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    正确的正则表达式是这样的

    /fisher\[\d+\].man/
    

    这是一种提取 id 的方法。

    id = text.replace(/fisher\[(\d+)\].man+/g,"$1");
    //Now do whatever you want with the id
    

    类似地,可以使用相同的替换技术来获取递增的 id:

    existingId = 'fisher[27].man';
    newId = existingId .replace(/(\d+)+/g, function(match, number) {
           return parseInt(number)+1;
    });
    console.log(newId);
    

    Demo with both usage

    【讨论】:

    • @vol7ron,感谢您的建议,希望您会喜欢编辑。
    • 太棒了,删除了我的评论 :)
    • @Starx,谢谢您的出色回答,我的问题是是否可以增加除带有特殊字符的数字以外的数字,例如existingId = 'fisher[27][ $27].man';我只想增加 [27],而不是 [$27]。问候扬
    • @JanZitniak 一种方法是this
    【解决方案2】:

    jsFiddle Demo

    不需要所有额外的代码。更改此行:

    var newId = newCloned.attr('id');
    

    收件人:

    var newId  = newCloned.attr('id').replace( /(\d+)/, function(){return arguments[1]*1+1} );
    

    【讨论】:

      【解决方案3】:

      如果你的身份证是这种格式

      id='fisher[27].man'
      

      你可以这样做

         var startIndex = newId.indexOf('[');
         var endIndex = newId.indexOf(']');
         var number = parseInt(newId.substr(startIndex + 1, endIndex - startIndex - 1));
         var incrementedId = number + 1;  // 28
      

      在哪里

      var newId = newCloned.attr('id');
      

      【讨论】:

        【解决方案4】:

        this question's accepted answer 的另一个简单解决方案:

        'url1'.replace(/\d+$/, function(n){ return ++n }); // "url2"
        'url54'.replace(/\d+$/, function(n){ return ++n }); // "url55"
        

        非常干净易读。

        【讨论】:

        • 要完全解决原始帖子的请求,需要从正则表达式中删除$,这样数字就不需要在字符串的末尾。
        【解决方案5】:

        您可以使用正则表达式替换很容易地做到这一点:

        var id = "fisher[27].man";
        id = id.replace(/\[(\d+)\]/, function(match, number) {
            return '[' + (parseInt(number, 10) + 1) + ']';
        });
        // id is now "fisher[28].man"
        

        【讨论】:

        • 如果你有fisher[07].man怎么办?它回馈fisher[8].man
        • a) 零填充似乎不是 OP 用例的一个元素。 b)如果您认为这是我的实现中的一个问题,请查看@Starx 接受的答案,它省略了parseInt 的基数参数,因此省略了risks parsing in base 8 for 0-padded numbers
        【解决方案6】:

        我很惊讶这个简单的东西没有任何好的实现。所有示例都忘记了数字前有零的情况。下面的代码应该可以解决这个问题。

        // 'item001' => 'item002'
        function increment_alphanumeric_str(str){
            var numeric = str.match(/\d+$/)[0];
            var prefix = str.split(numeric)[0];
        
            function increment_string_num(str){
                var inc = String(parseInt(str)+1);
                return str.slice(0, str.length-inc.length)+inc;
            }
        
            return prefix+increment_string_num(numeric);
        }
        

        例子:

        > increment_alphanumeric_str('test09')
        'test10'
        

        唯一的缺点是,如果我们有类似 'test99' 的内容,这将中断。

        【讨论】:

          猜你喜欢
          • 2013-05-12
          • 1970-01-01
          • 1970-01-01
          • 2013-07-18
          • 2020-11-16
          • 1970-01-01
          • 2018-01-19
          • 1970-01-01
          • 2015-02-09
          相关资源
          最近更新 更多