在字符串末尾使用JavaScript的parseInt函数

9
我知道

我知道

parseInt(myString, 10) // "Never forget the radix"  

如果字符串的开头是数字,则可以返回一个数字。但如果我有一个字符串"column5",并想要将其递增到下一个字符串"column6",那么该怎么在JavaScript中实现呢?字符串末尾的数字位数是可变的。

2
请勿在不想要非常奇怪的错误时使用parseInt而没有第二个参数,这里设置为10 :-) - regilero
6个回答

22
parseInt("column5".slice(-1), 10);

你可以使用-1或-2分别表示一到两位数字。

如果你想指定任意长度,可以使用以下代码返回数字:

parseInt("column6445".match(/(\d+)$/)[0], 10);

只要字符串以一个或多个数字结尾,上述方法就适用于任何长度的数字。


你对于3个字符、4个字符、5个字符或12个字符做些什么? - Mihai Toader
我喜欢这个,但我认为 .slice(6,string.length) 会给你最后 X 个数字(就像 benhowdle89 的评论一样) - sova
你不知道结束数字将有多少“列”(也称为数字)。 - Mihai Toader
做得太多了。所有字符串看起来都像columnXXX,其中XXX是变量位数。你知道"column"有6个字符长,也知道字符串columnXXX...的总长度,将它们相减就可以得到numDigits。这相当于切掉(已知的)左半部分,而不是试图猜测右半部分的大小。 - sova
@Toader Mihai Claudiu,原帖中并没有指定数字长度是任意的,但我已更新我的答案以包括该情况。 - Kai
@Toader Mihai Claudiu 谢谢 :) - Kai

4

将数字从文本中分离出来,解析它,递增它,然后重新连接起来。如果前面的字符串是众所周知的,例如“column”,您可以像这样处理:

var precedingString = myString.substr(0, 6); // 6 is length of "column"
var numericString = myString.substr(7);
var number = parseInt(numericString);
number++;

return precedingString + number;

3

试试这个:

var match = myString.match(/^([a-zA-Z]+)([0-9]+)$/);
if ( match ) {
  return match[1] + (parseInt(match[2]) + 1, 10);
}

这将把类似于text10的字符串转换为text11TxT1转换为Txt2等。适用于末尾带有长数字的情况。

由于默认parseInt值太过神奇而不可信,因此在parseInt调用中添加了基数。

详情请参见:

http://www.w3schools.com/jsref/jsref_parseInt.asp

基本上,它将把text010之类的东西转换为text9,这是不好的;)。


1
var my_car="Ferrari";
var the_length=my_car.length;
var last_char=my_car.charAt(the_length-1);
alert('The last character is '+last_char+'.');

感谢 http://www.pageresource.com/jscript/jstring1.htm 的贡献

然后只需增加 last_char 即可


谢谢您的快速回复!但是如果数字是变量位数怎么办?我预计会有数百列;x - sova
我不确定如果数字是两位数或更多是否有效。 - Rion Williams
2
没问题,因此使用 .length,这将计算字符串中的字符数。 - benhowdle89

0
使用正则表达式将单词和数字分离。 使用parseInt()增加数字。 将其附加到单词上。

0

尝试逐个字符读取字符串,检查其ASCII码。如果它的值在48到57之间,那么你就得到了一个数字。可以使用charCodeAt函数进行尝试。然后只需拆分字符串,增加数字并完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接