简体   繁体   中英

How to increment number in string using Javascript or Jquery

The id of my textarea is string and of this format

id='fisher[27].man'

I would like to clone the textarea and increment the number and get the id as fisher[28].man and prepend this to the existing textarea.

Is there a way to get this done easily with 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>");

There has to be easier way to clone, get index number, split and prepend.

I'm have also tried to do this with regEx

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

Can anybody help me with this?

Correct regex would be this

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

Here is a way through through which you would extract the the id.

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

Similarly, Same replacement technique can be used to get an incremented id as:

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

Demo with both usage

jsFiddle Demo

No need for all the extra code. Change this line:

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

To:

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

Another easy solution from this question's accepted answer :

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

Very clean and readable.

If your Id has this format

id='fisher[27].man'

You can do something like this

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

where

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

I am amazed that there is not any good implementation for this simple thing. All of the examples forget the case of having zeroes before the number. The code below should take care of that.

// '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);
}

Example:

> increment_alphanumeric_str('test09')
'test10'

Only drawback is that this will break if we have something like 'test99' .

You can do this pretty easily with a regex replacement:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM