这是您的代码,为了便于阅读,对格式进行了一些调整:
function intenseString(str) {
if (str.slice(-3) !== '!!!') {
return false;
}
if (str.slice(str.indexOf('!'))) {
return false;
}
if (str.slice(-3) === '!!!') {
return true;
}
}
您能否给出一些返回true 的示例输入?我认为这永远不会返回true,因为第二个if 语句说“如果字符串中有任何!,则返回false,这是通过第一个if 暗示的。
我相信您的意思是添加 + 1: if (str.slice(str.indexOf('!') + 1)) return false 表示“如果有任何 ! 不是字符串中的最后一个字符,则返回 false”,这仍然不起作用:第一个如果字符串不以!!! 结尾,if 语句将返回 false,这意味着到达第二个 if 语句的最小字符串是 !!!,并且在第一个 ! 之后总会有字符。
另一种可能的尝试是仅检查最后三个字符 if (str.slice(0, -3).slice(str.indexOf('!') + 1)) return false 之前的字符串,除了最后包含超过 4 个! 的字符串之外,这几乎可以工作......(例如!!!!!)。
我没有看到一种简单的方法(没有正则表达式来检查剩余的字符是否只有!)来使第二个if 语句在不循环字符串的情况下工作。
请注意,您的最终if 是不必要的。你的前两个正在检查失败,如果它们通过它们,它必须是一个 strongString。如果超过第一个if,字符串也必须以!!! 结尾。
这是一个潜在的解决方案,它遍历字符串中的每个字符,除了最后 4 个字符,如果有一个 ! 后面跟着不是 ! 的东西,则返回 false。
function intenseString(str) {
if (!str.endsWith('!!!')) {
return false;
}
for (let i = 0; i < str.length - 4; i++) {
if (str.charAt(i) === '!' && str.charAt(i + 1) !== ('!')) {
return false;
}
}
return true;
}