如何检查数组中的项是否为字母?

时间:2019-07-16 17:04:59

标签: javascript

所以在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]是一个字母呢?

5 个答案:

答案 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](?:[^+]|$)

enter image description here

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+"))