簡體   English   中英

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

[英]Split number and alphabets in string

假設我有以下字符串:

"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單個字符, 總是最后一個

好吧, MDN接下來講一元加法

一元加號是將某物轉換為數字的最快且首選的方式

如果您相信,可以采取以下方法:

 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

這在我腦海中

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

通過分析字符串的模式,數字和字母始終在左側或右側,而永遠不會在其他中間。 因此,實現此目標的最快,最干凈的方法是使用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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM