所以在codebyte上有一个练习:
让函数SimpleSymbols(str)的str参数为 通过并确定任一序列是否可接受 返回字符串true或false。 str参数将组成 的+和=符号之间有多个字符(即 ++ d + === + c ++ == a),为使字符串为真,每个字母必须用+符号包围。因此,左侧的字符串将为false。 该字符串不能为空,并且至少要有一个字母。
示例测试用例:
输入:“ + d + = 3 = + s +”
输出:真
输入:“ f ++ d +”
输出:false
这是我想出的解决方案,但是它不起作用:
function SimpleSymbols(str) {
// code goes here
var splitted = str.split('')
var result = splitted.map(function (arr){
for (var i=0; i<splitted.length; i++){
if (splitted[i] == '+' && splitted[i+2] == '+' && splitted[i+1] == /[a-z]/gi || && splitted[i+1] == /[A-Z]/gi){
return true
}
return false
}
}
})
return result;
}
// keep this function call here
SimpleSymbols(readline());
我认为问题出在我如何在if语句上编写正则表达式条件的地方。
那么如何正确地发现splitted [i + 1]是一个字母呢?
答案 0 :(得分:1)
类似这样的东西
function SimpleSymbols(str) {
// code goes here
var splitted = str.split('+')
var result = splitted.map(function (arr){
for (var i=0; i < splitted.length; i++){
if ( /[a-z]/gi.test(splitted[i]) && /[A-Z]/gi.test(splitted[i+1])
){
return true
}
return false
}
})
return result;
}
// keep this function call here
console.log(SimpleSymbols('f+g+j'));
答案 1 :(得分:1)
function SimpleSymbols(str) {
// code goes here
var splitted = str.split('')
var result = splitted.map(function (arr){
for (var i=0; i<splitted.length; i++){
if (splitted[i] == '+' && splitted[i+2] == '+' &&
(/^[a-zA-Z]+$/.test(splitted[i+1])))
{
console.log('true');
return true;
}else{
console.log('false');
return false;
}
}
})
return result;
}
SimpleSymbols('+d+=3=+s+');
答案 2 :(得分:1)
您在map内的splittedArray上进行循环是没有意义的,您可以直接使用map的索引参数
`.map(currentValue, index, array)`
而且您也不使用正则表达式来测试字符串,而是将字符串与正则表达式进行比较,
`splitted[i+1] == /[a-z]/gi`
如果要使用正则表达式,可以使用此模式
(?:^|[^+])[a-z]|[a-z](?:[^+]|$)
let inputs = ["+d+=3=+s+","f++d+"]
let check = (str) => +(str.match(/(?:^|[^+])[a-z]|[a-z](?:[^+]|$)/gi) || []).length > 0
inputs.forEach(str=> console.log(check(str)))
答案 3 :(得分:0)
您可以搜索由加号以外的字符包围的字符,并在找到字符时返回false。像这样:
function isValid(str) {
return !str.match(/\+[a-z]([^+]|$)|([^+]|^)[a-z]([^+]|$)|([^+]|^)[a-z]\+/gi);
}
isValid("+d+=3=+s+"); /// --> true
isValid("f++d+"); /// --> false
答案 4 :(得分:0)
我相信这是最简单的解决方案。只需走动字符串,然后检查找到的每个字母的两边是否都被+
包围。
function isEachLetterSurroundedByPlus(str) {
const re = /[a-z]/i;
for (let i = 0; i < str.length; i++) {
if (re.test(str[i])) {
if (str[i - 1] !== "+" || str[i + 1] !== "+")
return false;
}
}
return true;
}
console.log(isEachLetterSurroundedByPlus("+s+f+=+d+d=d+"));
console.log(isEachLetterSurroundedByPlus("+s+f+=+d+d+=+d+"))