簡體   English   中英

javascript:如何拆分包含兩位數整數的字符串?

[英]javascript: how to split string that includes double digit integers?

var string = "3y4jd424jfm

理想情況下,我希望它是["3","y","4","j","d","4","24","j","f","m"]

但是當我分裂: string.split("")所述2424是分開的。 我如何計算兩位數?

編輯:這是我試圖從編碼實踐中解決的問題:

使用JavaScript語言,讓函數EvenPairs(str)獲取傳遞的str參數,並確定字符串中的任何位置是否存在一對相鄰的偶數。 如果存在一對,則返回字符串true,否則返回false。 例如:如果str是“f178svg3k19k46”,那么在字符串的末尾有兩個偶數,“46”,所以你的程序應該返回字符串true。 另一個例子:如果str是“7r5gg812”,那么該對是“812”(8和12),所以你的程序應該返回字符串true。

你可以采取分階段的方法

  • 只獲取數組中的字符串數
  • filer按字符串的長度,
  • 檢查兩個數字是否均勻

 function even(n) { return !(n % 2); } function checkEvenPair(string) { return string .match(/\\d+/g) .filter(s => s.length > 1) .some(s => [...s].some((c => v => even(v) && !--c)(2)) ); } console.log(checkEvenPair('2f35fq1p97y931')); // false console.log(checkEvenPair('3y4jd424jfm')); // true 4 2 console.log(checkEvenPair('f178svg3k19k46')); // true 4 6 console.log(checkEvenPair('7r5gg812')); // true 8 12 console.log(checkEvenPair('2f35fq1p97y92321')); // true (9)2 32 

正則表達式解決方案,只使用偶數進行匹配。

 function checkEvenPair(string) { return /[02468]\\d*[02468]/.test(string); } console.log(checkEvenPair('2f35fq1p97y931')); // false console.log(checkEvenPair('3y4jd424jfm')); // true console.log(checkEvenPair('f178svg3k19k46')); // true console.log(checkEvenPair('7r5gg812')); // true console.log(checkEvenPair('2f35fq1p97y92321')); // true 

使用正則表達式進行數字提取,然后拆分為char,如下所示:

var regex = /\d+/g;
var string = "3y4jd424jfm";
var numbers = string.match(regex); 

var chars = string.replace(/\d+/g, "").split("");

var parts = numbers.concat(chars);

console.log(parts);

從這個例子7r5gg812 ,答案是正確的,因為有幾個偶數812彼此相鄰。

一種可能的解決方案是使用計數器迭代字符串,當您看到偶數時,計數器會遞增,當它不是數字時復位為0。 奇數位被忽略:

function EvenPairs(str) { 
  let counter = 0;
  for (let i = 0; i < str.length; i++) {
    if (isNaN(str[i] % 2)) {
      counter = 0;
    } else if (str[i] % 2 === 0) {
      counter++;
    }

    if (counter === 2) {
        return true;
    } 
  }
  return false; 
}

其他解決方案,使用regexps:

function EvenPairs(str) { 
    return /\d\d/.test(str.replace(/[13579]/g, ''));
}

你可以使用RegExp ,你不需要檢查兩個數字是否均勻,你只需要檢查兩個構成字符(數字)是否均勻。 因此,對於1234你不必檢查1234在這種情況下問題可能會更復雜(這里將解決的問題)。 你只需要檢查[ 1 & 2 ],[ 2 & 3 ],[ 3 & 4 ],其中沒有一個是偶數對。

我們可以避免解析字符串和讀取數字,算法計算偶數,...等等。

所以,對於簡單的(精明的甚至是chars)

偶數位的正則表達式是: /[02468]/

<your string>.match(/[02468]{2}/)會給你結果。

例:

 function EvenPairs(str) { let evensDigit = '[02468]', consecutiveEvenRegex = new RegExp(evensDigit + "{2}"); return !!str.match(consecutiveEvenRegex); } let str1 = "f178svg3k19k46"; //should be true as 4 then 6 let str2 = "7r5gg812"; // should be false, as 8 -> 1 -> 2 (and not 8 then 12) console.log(`Test EvenPairs for ${str1}: `, EvenPairs(str1)); console.log(`Test EvenPairs for ${str2}: `, EvenPairs(str2)); 

現在回到實際(可能)問題來檢查2個構成偶數(不僅是字符)我們只需要檢查是否存在:

<any even char><empty or 0-9 char><any even char> ie /[02468][0-9]{0,}[02468]/

讓我們為它創建一個工作示例

 function EvenPairs(str) { let evenDigit = '[02468]', digitsOrEmpty = '[0-9]{0,}', consecutiveEvenRegex = new RegExp(evenDigit + digitsOrEmpty + evenDigit); return !!str.match(consecutiveEvenRegex); } let str1 = "f178svg3k19k46"; //should be true as 4 then 6 let str2 = "7r5gg812"; // should be true as well, as 8 -> 12 console.log(`Test EvenPairs for ${str1}: `, EvenPairs(str1)); console.log(`Test EvenPairs for ${str2}: `, EvenPairs(str2)); 

暫無
暫無

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

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