Vous pouvez joindre toutes les expressions régulières en une seule. De cette façon, la chaîne n'est est analysée une seule fois. Même avec une expression régulière un peu plus complexe.
var thisExpressions = [ /something/, /something_else/, /and_something_else/];
var thisString = 'else';
function matchInArray(str, expr) {
var fullExpr = new RegExp(expr
.map(x=>x.source) // Just if you need to provide RegExp instances instead of strings or ...
// .map(x=>x.substring(1, x.length -2) // ...if you need to provide strings enclosed by "/" like in original question.
.join("|")
)
return str.match(fullExpr);
};
if (matchInArray(thisString, thisExpressions)) {
console.log ("Match!!");
}
En fait, même avec cette approche, si vous devez vérifier le même jeu d'expressions contre plusieurs chaînes de caractères, c'est un peu sous-optimal car vous construisez (et compilez) la même expression régulière à chaque appel de la fonction. (et compiler) la même expression régulière à chaque fois que la fonction est appelée.
Une meilleure approche serait d'utiliser un constructeur de fonctions comme celui-ci :
var thisExpressions = [ /something/, /something_else/, /and_something_else/];
var thisString = 'else';
function matchInArray_builder(expr) {
var fullExpr = new RegExp(expr
.map(x=>x.source) // Just if you need to provide RegExp instances instead of strings or ...
// .map(x=>x.substring(1, x.length -2) // ...if you need to provide strings enclosed by "/" like in original question.
.join("|")
)
return function (str) {
return str.match(fullExpr);
};
};
var matchInArray = matchInArray_builder(thisExpressions);
if (matchInArray(thisString)) {
console.log ("Match!!");
}