var string = "3y4jd424jfm
理想情况下,我希望它是["3","y","4","j","d","4","24","j","f","m"]
但是当我拆分:string.split("")
时,2
中的4
和24
是分开的。如何解释两位数?
编辑:这是我正在尝试从编码实践中解决的问题:
使用JavaScript语言,使函数EvenPairs(str)接受传递的str参数,并确定字符串中是否存在一对相邻的偶数。如果存在一对,则返回字符串true,否则返回false。例如:如果str为“ f178svg3k19k46”,则字符串的末尾有两个偶数“ 46”,因此您的程序应返回字符串true。另一个示例:如果str为“ 7r5gg812”,则该对为“ 812”(8和12),因此您的程序应返回字符串true。
答案 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
开始,答案是正确的,因为彼此之间有两个偶数8
和12
。
可能的解决方案是使用一个计数器遍历字符串,当看到偶数位时计数器递增,如果不是偶数位则重置为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
,您不必检查12
和34
,在这种情况下,问题可能会更复杂(此处将解决什么问题)。您只需要检查[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));