Найти ВСЕ заданные символы присутствуют в строке. Символы могут присутствовать в любом месте строки - PullRequest
1 голос
/ 13 октября 2019

Я пытаюсь найти, присутствуют ли указанные символы в строке.

Для приведенного ниже примера возвращается значение true. Но оно должно быть ложным, поскольку в abcdef есть только один «a».

Мое требование:

  1. Убедитесь, что все заданные символы присутствуют в строке.
  2. Символы могут находиться в любом месте строки. Нет необходимости, они должны быть в том же порядке. Но счет важен. В приведенном ниже примере я дал «aca», который содержит два «a», но значение в регулярном выражении содержит только один «a» в «abcdef».

Как проверить, что все заданные символыприсутствует в строке или нет?

var regEx = new RegExp("^[abcdef]+$");
regEx.test('aca') // returns true. **Expected**: false for this case

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Вы можете сначала найти количество каждого символа, а затем использовать метод 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")); 
0 голосов
/ 13 октября 2019

Короткий трюк с соответствием регулярному выражению и 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...