为了账号安全,请及时绑定邮箱和手机立即绑定

查找字符串中存在的所有给定字符。字符可以出现在字符串的任何位置

查找字符串中存在的所有给定字符。字符可以出现在字符串的任何位置

UYOU 2021-11-18 20:36:11
我试图找出字符串中是否存在给定的字符。对于下面的示例,它返回 true。但它应该是错误的,因为在 'abcdef' 中只有一个 'a'。我的要求:确认所有给定的字符都存在于字符串中。字符可以在字符串中的任何位置。不需要它们应该在相同的顺序。但计数很重要。在下面的示例中,我给出了“aca”,它包含两个“a”,但正则表达式中的值在“abcdef”中仅包含一个“a”。如何检查字符串中是否存在所有给定字符?var regEx = new RegExp("^[abcdef]+$");regEx.test('aca') // returns true. **Expected**: false for this case
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

您可以先找到每个字符的计数,然后使用every()方法检查是否所有字符都存在。


function findAll(str, key) {

  let count = str.split('').reduce((count, c) => {

    count[c] = count[c] + 1 || 1;

    return count;

  }, {});


  return key.split('').every(c => {

    if (count[c]) {

      count[c]--;

      return true;

    }

  });

}


console.log(findAll("abcdef", "abc"));

console.log(findAll("abcdef", "abca"));

console.log(findAll("abcdef", "xyz")); 


查看完整回答
反对 回复 2021-11-18
?
森林海

TA贡献2011条经验 获得超2个赞

正则表达式匹配和对象的小技巧Set:


var chars = 'abcdef'


function match_all(str, char_str){

    var pat = RegExp('['+ char_str +']', 'g'),

    matched_chars = [...new Set(str.match(pat))];

    matched_chars.sort()

    console.log(matched_chars.join('') == char_str)

}

  

match_all('aca', chars)

match_all('acbacadaef1a2a3', chars)

match_all('ccbacad1e2d', chars)


查看完整回答
反对 回复 2021-11-18
  • 2 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信