在字符串中拆分数字和字母

时间:2019-05-14 18:15:16

标签: javascript

假设我有以下字符串:

"22N"
"3X"
"-12X"
"12T"
"123123T"

现在,我想将numbersalphabets拆分成一个成对的数组:

[22, "N"]
[3, "X"]
[-12, "X"]
[12, "T"]
[123123, "T"]

我尝试过的事情:

var first = parseInt(input.substring(0, input.length - 1));
var last = input.slice(-1);

这可行,但是有什么更快的方法,因为我必须处理数百万个数据。

注意alphabets单个字符,并且总是最后

3 个答案:

答案 0 :(得分:6)

好吧,MDN接下来说说unary plus

  

一元加号是将某物转换为数字的最快且首选的方法

如果您相信这一点,可以采取下一种方法:

let tests = ["22N", "3X", "-12X", "12T", "123123T"];

const splitNumLetter = (str) => [+str.slice(0, -1), str.slice(-1)];

tests.forEach(s => console.log(splitNumLetter(s)));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

也许str.charAt(str.length - 1)str.slice(-1)快。您可以检查以下比较好的性能:https://jsperf.com/charat-vs-index/5

答案 1 :(得分:0)

这在我脑海中浮现,

var str="22N";
str=str.split('');
var last = str.pop(); 
var last = str.join('');

答案 2 :(得分:0)

通过分析字符串的模式,数字和字母始终在左侧或右侧,而不会在其他中间。因此,实现此目标的最快,最干净的方法是使用regex替换。

regex只需要一次,因为遵循这种模式,我提到您可以先提取数字,然后再替换从同一字符串中提取的数字。

假设您将元素包含在数组变量中

var elements = [
    "22N",
    "3X",
    "-12X",
    "12T",
    "123123T"
];

然后,您只需要遍历它们中的每一个,无论存在多少元素,都可以在定义最终数组之后使用forEach()函数:

var splitElements = [];
elements.forEach((string)=>{
    let numbers = string.replace(/[a-zA-Z]/g, ''),
        letters = string.replace(numbers,'');
   splitElements.push([numbers,letters])
});

然后您可以在splitElements上查看结果。看看它是如何工作的:

var elements = [
	"22N",
  "3X",
	"-12X",
  "12T",
  "123123T"
],
		splitElements = [];

elements.forEach((string)=>{
	let numbers = string.replace(/[a-zA-Z]/g, ''),
  		letters = string.replace(numbers,'');
   splitElements.push([numbers,letters])
});

console.log(splitElements);