web-dev-qa-db-fra.com

Faire correspondre une barre oblique avec une expression régulière

Je n'ai pas beaucoup d'expérience avec JavaScript, mais j'essaie de créer un système de balises qui, au lieu d'utiliser @ ou #, utiliserait /.

var start = /#/ig; // @ Match

var Word = /#(\w+)/ig; //@abc Match

Comment pourrais-je utiliser un / au lieu du #. J'ai essayé de faire var slash = '/' et d'ajouter + slash +, mais cela a échoué.

63
iBrazilian2

Vous pouvez y échapper comme ça.

/\//ig; //  Matches /

ou utilisez simplement indexOf

if(str.indexOf("/") > -1)
86
Ben McCormick

Vous devez échapper au / avec un \.

/\//ig // matches /
17
djechlin

Si vous voulez utiliser / vous devez l’échapper avec un \

var Word = /\/(\w+)/ig;
6
epascarello

Dans les expressions rationnelles, "/" est un caractère spécial à échapper (AKA est marqué en plaçant un\avant celui-ci, annulant ainsi toute fonction spécialisée qu'il pourrait remplir). 

Voici ce dont vous avez besoin:

var Word = /\/(\w+)/ig; //   /abc Match

Vous trouverez des informations sur les caractères spéciaux RegEx ici: http://www.regular-expressions.info/characters.html

6
Kirk H

Vous pouvez également contourner le traitement spécial par JS de la barre oblique en l'enfermant dans un groupe de caractères, comme suit:

const start = /[/]/g;
"/dev/null".match(start)     // => ["/", "/"]

const Word = /[/](\w+)/ig;
"/dev/null".match(Word)      // => ["/dev", "/null"]
4
nupanick

Pour moi, j'essayais de faire correspondre le / à une date en C #. Je l'ai fait simplement en utilisant (\/):

string pattern = "([0-9])([0-9])?(\/)([0-9])([0-9])?(\/)(\d{4})";
string text = "Start Date: 4/1/2018";

Match m = Regex.Match(text, pattern);

if (m.Success) 
{ 
    Console.WriteLine(match.Groups[0].Value);  // 4/1/2018
}
else
{
    Console.WriteLine("Not Found!");
}

JavaScript devrait également pouvoir utiliser de la même manière (\/)

1
vapcguy

J'ai rencontré deux problèmes liés à ce qui précède, lors de l'extraction de texte délimité par \ et /, et j'ai trouvé une solution qui convient aux deux, à part l'utilisation de new RegExp, qui nécessite \\\\ au début. Ces résultats sont dans Chrome et IE11. 

L'expression régulière

/\\(.*)\//g

ne marche pas. Je pense que le // est interprété comme le début d'un commentaire malgré le caractère d'échappement. L'expression régulière (également valable dans mon cas mais pas en général) 

/\b/\\(.*)\/\b/g

ne fonctionne pas non plus. Je pense que le second / termine l'expression régulière malgré le caractère d'échappement.

Ce qui fonctionne pour moi est de représenter / par \x2F, qui est la représentation hexadécimale de /. Je pense que c'est plus efficace et compréhensible que d'utiliser new RegExp, mais il faut bien sûr un commentaire pour identifier le code hexadécimal.

0
Ronald Davis

La barre oblique est un caractère spécial, vous devez donc ajouter une barre oblique inversée avant la barre oblique pour que cela fonctionne

$patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";

où/représente la recherche de /Avec cette manière 

0
Junaid Lodhi