2009-11-23 5 views
1
du plaisir à nouveau

... Regexregex en partie d'une chaîne

Prenez par exemple http://something.com/en/page

Je veux tester une correspondance exacte sur/en/y compris les barres obliques, sinon il pourrait correspondre ' en 'des autres parties de la chaîne.

Je suis sûr que c'est facile, pour quelqu'un d'autre que moi!

EDIT:

Je l'utilise pour un String.match() en javascript

+1

Pour quel langage de programmation avez-vous besoin regex ? C# et VB.net, par exemple tous les deux comprennent '"/en/"', mais ce n'est évidemment pas ce que vous cherchez ... – Heinzi

+0

@Heinzi - JavaScript a un raccourci pour définir une regex, par exemple. var someRegex =/\/en \ // ig qui peut aussi être écrit comme ceci var someRegex = new RegExp ("/ en /", "ig"). Généralement, la voie raccourcie est préférée. Je n'utilise que le nouveau RegExp si j'ai besoin de construire la regex en concaténant des chaînes. – nickytonline

Répondre

3

Eh bien cela dépend vraiment de ce langage de programmation sera l'exécution de la regex, mais le regex est tout simplement

/en/ 

Pour .Net le code suivant fonctionne correctement:

string url = "http://something.com/en/page"; 

bool MatchFound = Regex.Match(url, "/en/").Success; 

Voici la version JavaScript:

var url = 'http://something.com/en/page'; 
if (url.match(/\/en\//)) { 
    alert('match found'); 
} 
else { 
    alert('no match'); 
} 

DUH

Merci à Welbog et Chris Ballance à faire ce qui aurait dû être le point le plus évident. Cela ne nécessite pas d'expressions régulières à résoudre. C'est simplement une instruction contains. Regex ne devrait être utilisé que là où il est nécessaire et cela aurait dû être ma première considération et non la dernière.

+0

Parfait, merci .. J'avais des problèmes pour échapper à mes barres obliques. – Ben

+2

Utiliser 'regex.test()' est moins coûteux que 'string.match()' – James

+3

Utiliser un simple String.Contains ("/ en /") est moins coûteux que d'utiliser un Regex du tout ... –

1

Quel est le motif /en/ ne fonctionnerait pas?

+0

Cela ne fonctionnerait pas puisque la barre oblique fait partie intégrante de l'expression rationnelle, d'où la nécessité de l'échapper selon la réponse de Parappa car la barre oblique est généralement utilisée comme indicateur dans la regex. fourni, par exemple pour rechercher une chaîne en ignorant les majuscules/minuscules serait/some_string/i. – t0mm13b

+0

Et aussi il est basé sur quel langage de programmation, voir la réponse de TheLameDuck. Certainement pour C#, vous auriez besoin d'échapper à la barre oblique. – t0mm13b

+0

Bien que j'apprécie les félicitations, c'est seulement la barre oblique inversée qui devrait être échappée. De plus, vous pouvez toujours contourner tout le problème s'il y avait un problème en faisant un littéral de chaîne, c'est-à-dire string test = # "my back \ slash"; –

2

Vous devrez peut-être échapper aux avant-slash ...

/\/en\// 
+0

Il suffit de faire une correspondance de chaîne, Regex est trop pour cette affaire. –

0

/\/en\// ou peut-être /http\w*:\/\/[^\/]*\/en\//

5

Si vous essayez de faire correspondre /en/ précisément, vous n'avez pas besoin d'une expression régulière du tout. Utilisez simplement l'équivalent contains de votre langue pour tester cette sous-chaîne.

Si vous essayez de faire correspondre une partie à deux lettres de l'URL entre deux barres obliques, vous avez besoin d'une expression comme ceci:

/../ 

Si vous voulez capturer le code à deux lettres, placez-le périodes entre parenthèses:

/(..)/ 

en fonction de votre langue, vous pourriez avoir besoin pour échapper aux barres obliques:

\/..\/ 
\/(..)\/ 

Et si vous voulez vous assurer que vous correspondez des lettres au lieu de tous les caractères (y compris les numéros et symboles), vous pouvez utiliser une expression comme ceci:

/[a-z]{2}/ 

qui sera reconnu par la plupart des variations regex.

Encore une fois, vous pouvez échapper aux barres obliques et ajouter un groupe de capture de cette façon:

\/([a-z]{2})\/ 

Et si vous n'avez pas besoin de les échapper:

/([a-z]{2})/ 

Cette expression correspond à toute chaîne sous la forme /xy/x et y sont des lettres. Donc, il va correspondre /en/, /fr/, /de/, etc

En JavaScript, vous aurez besoin de la version d'échappement: \/([a-z]{2})\/.

+1

+1 for soulignant que les expressions rationnelles ne sont pas nécessaires pour les correspondances exactes. – Heinzi

0

Vous n'avez pas besoin regex pour cela:

location.pathname.substr(0, 4) === "/en/" 

Bien sûr, si vous insistez sur l'utilisation d'une expression rationnelle, utilisez ceci:

/^\/en\//.test(location.pathname) 
Questions connexes