200 votes

Correspond à la chaîne exacte

Quelle est l'expression régulière (en JavaScript, si cela a de l'importance) qui ne correspond que si le texte est une correspondance exacte ? Autrement dit, il ne doit pas y avoir de caractères supplémentaires à l'autre bout de la chaîne.

Par exemple, si j'essaie de trouver une correspondance pour abc entonces 1abc1 , 1abc y abc1 ne correspondrait pas.

6 votes

Pour les novices en matière de regex, il existe deux bonnes réponses à cette question, en fonction de ce que vous recherchez. Le demandeur veut vraiment \babc\b ce qui permettrait, par exemple, de 123 abc 123 pour correspondre à abc (mais pas les exemples négatifs comme dans la question) ; cependant, ^abc$ s'assurera que a est au début de la chaîne et c est à la fin - sinon il ne correspondra pas.

381voto

Howard Points 23487

Utilisez les délimiteurs de début et de fin : ^abc$

3 votes

@Jake, je suis content que la réponse d'Howard ait fonctionné, mais je pense que vous devriez noter qu'elle ne fonctionnera que lorsque abc est le seul élément de la chaîne. Par exemple, elle ne correspondra pas à "les 3 premières lettres de l'alphabet sont abc".

0 votes

Cela a fonctionné pour moi, peut-être que mon exemple aurait dû être "abc def ghi" comme cible de la correspondance.

1 votes

@Jake si votre chaîne était "abc def ghi" alors /^abc$/ ne fonctionnerait pas. ex : jsfiddle.net/XUyAc

49voto

matchew Points 5196

Cela dépend. Vous pourriez

string.match(/^abc$/)

Mais cela ne correspondrait pas à la chaîne suivante : "les 3 premières lettres de l'alphabet sont abc. et non abc123".

Je pense que vous voudriez utiliser \b (limites des mots) :

var str = 'the first 3 letters of the alphabet are abc. not abc123';
var pat = /\b(abc)\b/g;
console.log(str.match(pat));

Exemple concret : http://jsfiddle.net/uu5VJ/

Si la première solution vous convient, je vous déconseille de l'utiliser.

Cela signifie que vous pouvez avoir quelque chose comme ce qui suit :

var strs = ['abc', 'abc1', 'abc2']
for (var i = 0; i < strs.length; i++) {
    if (strs[i] == 'abc') {
        //do something 
    }
    else {
        //do something else
    }
}

Alors que vous pourriez utiliser

if (str[i].match(/^abc$/g)) {
    //do something 
}

Cela nécessiterait beaucoup plus de ressources. Pour moi, la règle générale est la suivante : pour une simple comparaison de chaînes de caractères, utilisez une expression conditionnelle ; pour un motif plus dynamique, utilisez une expression régulière.

Plus d'informations sur les regex JavaScript : https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

12 votes

@NiharSawant C'est parce que ce n'est pas la réponse à la question posée par le PO. Le PO a clairement n'a pas nous voulons faire correspondre "'les 3 premières lettres de l'alphabet sont abc", et la deuxième solution ne fonctionne pas pour faire correspondre des expressions rationnelles générales, par exemple /^[abc]+$/.

15voto

Prusse Points 3562

"^" pour le début de la ligne "$" pour la fin de la ligne. Par exemple :

var re = /^abc$/;

correspondrait à "abc" mais pas à "1abc" ou "abc1". Pour en savoir plus, consultez https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X