我有字母数字字符串,它总是以数字结尾,但可能会在早期嵌入其他数字。
我需要递增数字结尾并返回新的ID号。
示例:
A48-DBD7-398
将在循环中递增:
A48-DBD7-398
A48-DBD7-399
A48-DBD7-400
如何将数字尾部与字符串的其余部分分开,然后将这两部分保存到不同的变量中?
我发现了其他几个S.O.将数字从字符串中分割出来的问题,但它们无法处理第一部分中的混合字母数字字符 - 否则它们会将所有数字分开,无论它们在何处。我只需要获得尾随数字。
更新: 此问题仍然存在
我发现了一个案例,我的解决方案不起作用:
ABC123-DE45-1
重复:
ABC2
ABC3
ABC4
答案 0 :(得分:4)
如果您对不同的方法感兴趣,可以这样做:
$('button').click(function () {
var value = $('#in').val(); // get value
for (var i = 1; i <= 5; i++) {
value = value.replace(/(\d+)$/, function (match, n) {
return ++n; // parse to int and increment number
}); // replace using pattern
$('#result')[0].innerHTML += '<br>' + value;
}
});
答案 1 :(得分:2)
这里是另一种解决方案,以防万一
$('button').click(function() {
var ser = $('#in').val();
var arr = ser.split("-");
var num = parseInt(arr[arr.length - 1]);
arr.splice(-1, 1);
var str = arr.join ('-');
for (n = 1; n <= 5; n++) {
num++;
ser = str + '-' + num;
$('#result').html($('#result').html() + '<br>' + ser);
}
});
div{width:80%;margin-top:30px;background:wheat;}
<input id="in" type="text" value="ABC123-DE45-1" />
<button>Go</button>
<div id="result"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 2 :(得分:0)
更新: 请参阅OP问题底部的新章节:“此问题仍未解决”
我明白了,并且正在为未来的求职者发布问题。
<强> HTML:强>
<input id="in" type="text" value="A48-DBD7-395" />
<button>Go</button>
<div id="result"></div>
<强> JS / JQ:强>
$('button').click(function(){
var ser = $('#in').val();
var num = parseInt(ser.match(/\d+$/));
var pos = ser.indexOf(num);
var str = ser.slice(0,pos);
for (n=1;n<=5;n++){
num++;
ser = str + num;
$('#result').html( $('#result').html() +'<br>'+ser);
}
});
答案 3 :(得分:0)
我的2美分:使用正则表达式识别模式并增加最后一部分。
function incrementAlphanumeric(str) {
const numPart = str.match(/(0?[1-9])+$|0?([1-9]+?0+)$/)[0];
const strPart = str.slice(0, str.indexOf(numPart));
const isLastIndexNine = numPart.match(/9$/);
// If we have a leading zero (e.g. - 'L100A099')
// or there is no prefix - we should just increment the number
if (isLastIndexNine || strPart != null) {
return strPart + numPart.replace(/\d+$/, (n) => ++n );
}
// Increment the number and add the missing zero
else {
return strPart + '0' + numPart.replace(/\d+$/, (n) => ++n );
}
}
例如使用以下格式:
演示副本-https://repl.it/@EdoMagen/Increment-alphanumeric-string
答案 4 :(得分:0)
我也尝试这样做,但是我的输入上有3个数字,例如ABC123-DE45-000 我如何将最后一个0增量设为1,它将看起来像ABC123-DE45-001,ABC123-DE45-002,ABC123-DE45-003等等,所以我尝试执行此代码,结果发现000将增加到1而不是001,我得到它是因为(\ d +)找到了一个具有数字的字符串,然后将其转换为Integer,但是我的问题是否有可能像我要的那样?感谢您的答复,希望有人会注意到我。
答案 5 :(得分:-1)
const s = "A48-DBD7-398";
s.split('-').reduce((a,b)=>{
if(Number(b)){b = Number(b) + 1}
return a +'-'+ b;
})
> "A48-DBD7-399"