I want to retrieve inside an array all the elements who match multiple strings (all of them & not necessary words): like a search engine returning all results matching term_searched#1 && term_searched#2.
It's not a question about duplicates in the array (there's none), but about searching for a conjunction of elements: traditionally, the search is for one element, by himself or in disjunction with others (a|b|c). Just want to search (a && b && c).
I tried:
- indexOf(): I can work only with one element to locate in the array.
- match(): there is no- ANDoperator in a- regexexpression (only- |- sadly, it would be so simple). So I tried to inject these- regexexpressions- /(?=element1).*(?=element2)/gim
- /(?=element1)(?=element2)/gimsee here
 
The first regex expression works, but not at every time: seems very fragile...
So I don't know if I'm in the good direction (match) or if I can't figure what is the right regex expression... Need your advices.
// filter grid by searching on 'input' event
'input #search': (e)=> {
    var keypressed = e.currentTarget.value;
    // create array on 'space' input
    var keyarr = keypressed.toLowerCase().split(" ");
    // format each array's element into regex expression
    var keyarrReg = [];
    for(i = 0; i < keyarr.length; i++) {
        var reg = '(?=' + keyarr[i] + ')';
        keyarrReg.push(reg);
    }
    // array to regex string into '/(?=element1).*(?=element2)/gim' format
    var searching = new RegExp(keyarrReg.join(".*"), 'mgi');
    // set grid
    var grid = new Muuri('#gridre', {
        layout: {
            fillGaps: true,
        }
    });
    if (keypressed) {
        // filter all grid's items (grid of items is an array)
        grid.filter(function (item) {
            var searchoperator = item.getElement().textContent.toLowerCase().match(searching);
            // get items + only their text + lower case their text + return true (not false) in the value ('keypressed') is found in them
            //var searchoperator = item.getElement().textContent.toLowerCase().indexOf(keypressed.toLowerCase()) != -1;
            return searchoperator;
        }
        [....]
    }
}
Edit with Gawil's answer adapted to my initial code (to help if needed)
// filter grid by searching on 'input' event
'input #search': (e)=> {
    var keypressed = e.currentTarget.value;
    // create array on 'space' input
    var keyarr = keypressed.toLowerCase().split(" ");
    // convert the array to a regex string, in a '^(?=.*word1)(?=.*word2).*$' format
    // here is Gawil's answer, formatted by Teemu 
    var searching = new RegExp('^(?=.*' + keyarr.join(')(?=.*') + ').*$', 'm');
    // set grid
    var grid = new Muuri('#gridre', {
        layout: {
            fillGaps: true,
        }
    });
    if (keypressed) {
        // filter all grid's items (grid of items is an array)
        grid.filter(function (item) {
            // get items + only their text + lower case their text + delete space between paragraphs
            var searchraw = item.getElement().textContent.toLowerCase().replace(/\r\n|\n|\r/gm,' ');
            var searchoperator = searchraw.match(searching);
            return searchoperator;
        }
        [....]
    }
}
 
     
    