首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中查找字符串中的多个元素

在javascript中查找字符串中的多个元素
EN

Stack Overflow用户
提问于 2020-11-18 13:33:15
回答 3查看 253关注 0票数 0

我想以布尔形式返回findAB(str)中是否存在条件之一

  1. A 5字母长字符串,以a结尾以b结尾
  2. 5字母长字符串以b结尾以a

开头

代码语言:javascript
复制
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()方法将字符串转换为小写,并定义了indexOFaindexOFb

我以为仅仅做a + 4索引就会变成真,但实际上它没有,也不可能知道我做错了什么。我还知道在数组中查找元素的一些方法,如find()、include()、map()或filter,但不确定是否可以使用它,因为它不是数组。

EN

回答 3

Stack Overflow用户

发布于 2020-11-18 13:41:26

如果要搜索以(a和b)或(b和a)开头和以(b和a)结尾的5个字符的模式,而不考虑大小写和任何长度的字符串,则可以这样做。regex认为字符串"a __ b“或"b _ a”在任何情况下只能有字母,而不是任何其他字符,如果您正在接受任何其他字符,则可以在正则表达式中更新update部分。

代码语言:javascript
复制
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,并且您只是处理第一个和最后一个字符,您可以使用以下函数

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2020-11-18 13:50:02

如果你想改变你的方法,你可以像这样使用regex

代码语言:javascript
复制
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
}

如果您需要区分触发的是哪种情况,这可能是一个更干净的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2020-11-18 13:58:16

纠正您的解决方案.

解决方案的问题是,如果找到不匹配,indexOf将返回-1。因此findAB("bbbbb")将返回true,因为indexOFa变量将等于-1lowerSTR[indexOFa + 4]将检查最后一个字符,条件将计算为true。下面的代码将解决您的问题。

代码语言:javascript
复制
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

你也可以这样做

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64894120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档