簡體   English   中英

根據第一個出現的數字分割字符串

[英]Split string based on the first occurring number javascript

我有一個string ,我想使用.split()函數拆分為多個

字符串示例

59 Samuël 1 en 2 // Example 1
1 Saul omgekomen door het zwaard // Example 2
622 Koningen 1 tot 10 // Example 3

預期產量

['59', 'Samuël 1 en 2'] // Output example 1
['1', 'Saul omgekomen door het zwaard'] // Output example 2
['622', 'Koningen 1 tot 10'] // Output example 3

我根據其他主題中的答案嘗試了以下代碼。

 var example_1 = '59 Samuël 1 en 2'; var example_2 = '1 Saul omgekomen door het zwaard'; var example_3 = '622 Koningen 1 tot 10'; console.log(example_1.split(/(\\d+)/)); console.log(example_2.split(/(\\d+)/)); console.log(example_3.split(/(\\d+)/)); 

但是輸出不是預期的輸出,例如。 ['59', 'Samuël 1 en 2']

有人可以指出我正確的方向嗎?

正如OP在評論中所述,預期的輸入為99 string

這可以在正則表達式中表示為2個捕獲組。

第一個-> \\d\\d 2個數字..第二個-> .*其他。

然后,您可以將其與捕獲組結合。

因此最終的正則表達式為/(\\d\\d) (.*)/

如果數字的長度可能不是2位數字,則可能需要\\d+

這是99 string的工作示例

 console.log("59 Samuël 1 en 2".match(/(\\d\\d) (.*)/).slice(1)); 

如果數字可以是單個,甚至是3,那么可能會更好。

 console.log("59 Samuël 1 en 2".match(/(\\d+) (.*)/).slice(1)); console.log("159 Samuël 1 en 2".match(/(\\d+) (.*)/).slice(1)); console.log("9 Samuël 1 en 2".match(/(\\d+) (.*)/).slice(1)); 

我認為使用帶有“。+”的捕獲組來包含之后的所有內容都應該可行。

 var string = '59343 Samuël 1 en 2'; console.log(string.split(/\\d+(.+)/)[1].replace(' ', '')); 

您可以使用捕獲括號,然后過濾出空的匹配項

 const str = '50 Samuël 1 en 2'; console.log(str.split(/(\\d+)(.+)/).filter(e => e)); 

只要您可以指望在第一個數字序列之后有一個空格,就可以這樣做。 它不是很漂亮,但是應該很清楚,因此,如果您願意,可以提高效率。

(請注意,按數字分割會刪除數字,這並不是根據預期輸出實際要查找的內容。)

var str = '59 Samuël 1 en 2';
var arr = str.split(" ");
let i = 0, firstIntPosInArr = -1;
for(; i < arr.length; i++){
    if(parseInt(arr[i])){
        firstIntPosInArr = i;
        console.log(`${i}: ${arr[i]}`);
        break; 
    }
}

console.log(firstIntPosInArr);

let firstPart = [], secondPart = [], output = [];
for(i = 0; i < arr.length; i++){
    if(i <= firstIntPosInArr){ firstPart.push(arr[i]); }
    else secondPart.push(arr[i]);
}

console.log("1:" + firstPart);
console.log("2:" + secondPart);

output.push(firstPart.join(' '));
output.push(secondPart.join(' '));

console.log(output);

如果您不希望僅使用split ,則可以將其與slice結合在一起並加入以實現所需的結果。

[
  string.split(/(\d+)/)[0],
  string.split(/(\d+)/).slice(1).join(' ')
]

另一種選擇是使用僅與第一個數字匹配的RegExp,但這也需要與filter結合使用,因為它會為輸出數組中的第一個條目創建一個匹配項''

string.split(/^(\d*) /).filter(Boolean);

編輯: 最佳最終解決方案:

要使用單個RegExp進行splitsplit ,可以使用以下命令:

string.split(/[^\d](.*\d*)$/, 2);

此RegExp將拆分(並捕獲)從最后一位到第一位之前的整個字符串,即“Samuël1 en 2” 此方法仍在split數組的末尾產生多余的空字符串,這就是為什么需要限制器的原因。

暫無
暫無

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

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