Как я могу проверить, содержит ли строка заданный набор символов (независимо от порядка), используя Regex?

Я пытаюсь написать регулярное выражение, чтобы проверить, содержит ли данная строка набор символов, однако строка ДОЛЖНА содержать ВСЕ символы, независимо от порядка появления. Например:

var myString = "howdyhow";
var toMatch = "hyo";

Строка myString содержит все символы строки toMatch. Мне нужно что-то похожее на регулярное выражение [hyo], но вместо сопоставления вхождений h OR y OR o мне нужно, чтобы оно соответствовало вхождениям h AND y AND o (не обращая внимания на порядок или «расстояние» между символами).


person Rafuka    schedule 06.07.2015    source источник
comment
Я боюсь, что регулярное выражение не может удовлетворить эту потребность, я думаю, вам придется перебирать каждый символ toMatch и проверять, присутствует ли он в myString.   -  person sp00m    schedule 06.07.2015
comment
«var» в вашем примере предполагает, что вы используете язык программирования. Итак, просто используйте 3 RE (/h/, /y/, /o/) и используйте предложение AND.   -  person Happy Green Kid Naps    schedule 06.07.2015


Ответы (2)


Вы можете создать регулярное выражение на основе просмотра из второй строки и метода вызова RegExp.test:

var re = new RegExp( toMatch.split('').map(function(item) { 
              return "(?=.*?" + item + ")"; }).join('') );
//=> re = /(?=.*?h)(?=.*?y)(?=.*?o)/

var matched = re.test(myString);

Предварительный просмотр в /(?=.*?h)(?=.*?y)(?=.*?o)/ гарантирует, что все символы второй строки совпадают с первой строкой, независимо от их позиций.

person anubhava    schedule 06.07.2015

Я знаю, что это не регулярное выражение, но лично я бы использовал Contains

if(value.Contains("h") && value.Contains("y") & value.Contains("o")) {}
person maksymiuk    schedule 06.07.2015