javascript - correspondance d'expression régulière contre le tableau des articles
Est-il un moyen en JavaScript pour obtenir une valeur Booléenne pour un match de la chaîne contre le tableau des expressions régulières?
L'exemple est le suivant (où le " si " déclaration représente ce que je suis en train de réaliser):
var thisExpressions = [ '/something/', '/something_else/', '/and_something_else/'];
var thisString = 'else';
if (matchInArray(thisString, thisExpressions)) {
}
- Vous êtes à la recherche pour un match contre toutes les expressions (ET), ou l'une des expressions de la (OU des)?
- Avec jquery, vous pouvez utiliser jQuery.inArray();
Vous devez vous connecter pour publier un commentaire.
http://jsfiddle.net/9nyhh/1/
À l'aide d'une approche plus fonctionnelle, vous pouvez mettre en œuvre le match avec un one-liner à l'aide d'un fonction de tableau:
ECMAScript 6:
ECMAScript 5:
filter
méthode pourArray
s, ce qui est souvent utile et est utilisé de la même manière.Vous pouvez utiliser .test() qui retourne une valeur booléenne quand c'est de trouver ce que vous cherchez dans une autre chaîne:
test
il appelletoString
sur l'argument fourni, ce qui, pour le tableau, serajoin()
. Probablement pas indispenssable!/monkey/.test({ toString : () => "monkey" }) // true
\b
est une limite de mot - de sorte que vous pourriez/\broller\b/
dans juste le mot "rouleau", mais il ne serait pas conforme 'montagnes russes', cependant, si vous avez pris hors de la fuite\b
alors il pourrait correspondre à la première partie de 'dents de scie'regarder de cette façon...
Vous pouvez rejoindre toutes les expressions régulières dans un seul. De cette façon, la chaîne est
scanné qu'une seule fois. Même avec un peu plus complexe de l'expression régulière.
En fait, même avec cette approche, si vous avez besoin de vérifier la même expression
à l'encontre de plusieurs chaînes de caractères, c'est un peu sous-optimale parce que vous êtes la construction
(et la compilation) la même expression régulière chaque fois que la fonction est appelée.
Meilleure approche serait d'utiliser un générateur de fonction comme ceci:
matchInArray(thisString, thisExpressions).index
var matchInArray = matchInArray_builder(thisExpressions);
? comme ceci:var matchInArray = matchInArray_builder(thisExpressions); var index = matchInArray(thisString, thisExpressions).index
?matchInArray()
fonction retourne le résultat deString.match()
. Donc, en fait, le "si" l'état n'est pas une valeur booléenne, mais d'une structure complète (qui évalue à true) des rapports de la sous-chaîne correspondante et sa position...ici sera le vérifier pour les expressions suivantes:
à l'aide du Tableau .méthode find() pour parcourir tableau et .incluez à la case sous-chaîne
Afin de nous faire une fonction qui prend une chaîne littérale, et le tableau que nous voulons regarder. il renvoie un nouveau tableau avec les correspondances trouvées. Nous créons un nouvel objet regexp l'intérieur de cette fonction, puis d'exécuter une Chaîne de caractères.recherche sur chaque élément de l'élément dans le tableau. Si trouvé, il pousse la chaîne dans un tableau et retourne.