我想以布尔形式返回findAB(str)中是否存在条件之一
开头
function findAB(str) {
let lowerSTR = str.toLowerCase()
let indexOFa = lowerSTR.indexOf('a')
let indexOFb = lowerSTR.indexOf('b')
if (lowerSTR[indexOFa + 4] === 'b' || lowerSTR[indexOFb + 4] === 'a') {
return true;
}
return false;
}我首先使用.toLowerCase()方法将字符串转换为小写,并定义了indexOFa和indexOFb。
我以为仅仅做a + 4索引就会变成真,但实际上它没有,也不可能知道我做错了什么。我还知道在数组中查找元素的一些方法,如find()、include()、map()或filter,但不确定是否可以使用它,因为它不是数组。
发布于 2020-11-18 13:41:26
如果要搜索以(a和b)或(b和a)开头和以(b和a)结尾的5个字符的模式,而不考虑大小写和任何长度的字符串,则可以这样做。regex认为字符串"a __ b“或"b _ a”在任何情况下只能有字母,而不是任何其他字符,如果您正在接受任何其他字符,则可以在正则表达式中更新update部分。
function findAB(str) {
const regexp = /(.?(((a|A)[a-zA-Z]{3}(b|B))|((b|B)[a-zA-Z]{3}(a|A))).?)/;
return regexp.test(str);
}如果是固定的,那么字符串的长度应该是5,并且您只是处理第一个和最后一个字符,您可以使用以下函数
function findAB(str) {
const lengthOfString = str.length;
if (lengthOfString === 5) {
const firstCharacter = str[0].toLowerCase()
const lastCharacter = str[lengthOfString-1].toLowerCase()
return (firstCharacter === 'a' && lastCharacter === 'b') || (firstCharacter === 'b' && lastCharacter === 'a');
}
// returns false string does not contains 5 characters
return false;
}发布于 2020-11-18 13:50:02
如果你想改变你的方法,你可以像这样使用regex
function findAB(str) {
let case1 = str.match(/a[a-z]*b/g); // get all substrings starting with a and ending with b
let case2 = str.match(/b[a-z]*a/g); // get all substrings starting with b and ending with a
case1.forEach((matchedString) => {
if (matchedString.length == 5) {
return true;
}
});
case2.forEach((matchedString) => {
if (matchedString.length == 5) {
return true;
}
});
return false; // return false if no substrings matching condition exists
}如果您需要区分触发的是哪种情况,这可能是一个更干净的解决方案。
发布于 2020-11-18 13:58:16
纠正您的解决方案.
解决方案的问题是,如果找到不匹配,indexOf将返回-1。因此findAB("bbbbb")将返回true,因为indexOFa变量将等于-1,lowerSTR[indexOFa + 4]将检查最后一个字符,条件将计算为true。下面的代码将解决您的问题。
function findAB(str) {
let lowerSTR = str.toLowerCase()
let indexOFa = lowerSTR.indexOf('a')
let indexOFb = lowerSTR.indexOf('b')
if ((indexOFa >= 0 && lowerSTR[indexOFa + 4] === 'b') || (indexOFb >= 0 && lowerSTR[indexOFb + 4] === 'a')) {
return true;
}
return false;
}而且,我不希望硬编码4更好地使用str.length-1。
你也可以这样做
function findAB(str) {
let lowerSTR = str.toLowerCase();
let indexOFa = lowerSTR.indexOf('a');
let indexOFb = lowerSTR.indexOf('b');
if (
(indexOFa === 0 && indexOFb === str.length - 1) ||
(indexOFb === 0 && indexOFa === str.length - 1)
)
return true;
return false;
}https://stackoverflow.com/questions/64894120
复制相似问题