javascript:如何分割包含两位数整数的字符串?

时间:2018-08-19 07:02:21

标签: javascript

var string = "3y4jd424jfm

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

但是当我拆分:string.split("")时,2中的424是分开的。如何解释两位数?

编辑:这是我正在尝试从编码实践中解决的问题:

使用JavaScript语言,使函数EvenPairs(str)接受传递的str参数,并确定字符串中是否存在一对相邻的偶数。如果存在一对,则返回字符串true,否则返回false。例如:如果str为“ f178svg3k19k46”,则字符串的末尾有两个偶数“ 46”,因此您的程序应返回字符串true。另一个示例:如果str为“ 7r5gg812”,则该对为“ 812”(8和12),因此您的程序应返回字符串true。

4 个答案:

答案 0 :(得分:2)

您可以采用分阶段的方法

  • 仅获取数组中字符串的数字
  • 根据字符串长度的文件管理器
  • 检查两个数字是否为偶数

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

答案 1 :(得分:1)

使用正则表达式提取数字,然后按如下所示拆分为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);

答案 2 :(得分:0)

从这个示例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; 
}

使用正则表达式的其他解决方案:

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

答案 3 :(得分:0)

您可以使用RegExp,您不需要检查两个数字是否为偶数,只需检查两个构成字符(即数字)是否为偶数。 因此对于1234,您不必检查1234,在这种情况下,问题可能会更复杂(此处将解决什么问题)。您只需要检查[1 & 2,[2 & 3],[3 & 4]中没有一个是偶对。

我们可以避免解析字符串并将其读取为数字,对偶数..等进行算术计算。

因此,对于简单的字符(连字符,连字符)

偶数正则表达式为:/[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>,即/[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));