Matching eines Forward Slash mit einem Regex

88

Ich habe nicht viel Erfahrung mit JavaScript, aber ich versuche ein Tag-System zu erstellen, das anstelle von @oder #verwendet wird /.

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

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

Wie könnte ich eine /anstelle der verwenden #. Ich habe versucht, etwas zu tun var slash = '/'und hinzuzufügen + slash +, aber das ist fehlgeschlagen.

iBrazilian2
quelle
1
Bitte ändern Sie den Titel. Und was versuchst du wirklich zu tun? Ich habe immer noch keine Ahnung, nachdem ich Ihre Frage gelesen habe.
OptimusCrime
Ich bin mir nicht sicher ob ich das verstehe.
John Strickler

Antworten:

121

Sie können es so entkommen.

/\//ig; //  Matches /

oder verwenden Sie einfach indexOf

if(str.indexOf("/") > -1)
Ben McCormick
quelle
Danke Ben, das habe ich auch versucht, aber am Ende habe ich noch einen hinzugefügt.
iBrazilian2
21

Sie müssen /mit einem entkommen \.

/\//ig // matches /
Djechlin
quelle
6

Wenn Sie verwenden möchten, müssen /Sie es mit einem entkommen\

var word = /\/(\w+)/ig;
Epascarello
quelle
6

In regulären Ausdrücken ist "/" ein Sonderzeichen, das maskiert werden muss (AKA wird gekennzeichnet, indem ein \ davor gesetzt wird, wodurch jegliche spezielle Funktion, die es möglicherweise erfüllt, negiert wird).

Folgendes benötigen Sie:

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

Informieren Sie sich hier über RegEx-Sonderzeichen: http://www.regular-expressions.info/characters.html

Kirk H.
quelle
16
"/" ist kein Sonderzeichen in regulären Ausdrücken. Es ist jedoch ein Sonderzeichen in JavaScript, das begrenzt, wo der reguläre Ausdruck beginnt und endet.
Sokkyoku
4

Sie können die spezielle JS-Behandlung des Schrägstrichs auch umgehen, indem Sie ihn wie folgt in eine Zeichengruppe einschließen:

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

const word = /[/](\w+)/ig;
"/dev/null".match(word)      // => ["/dev", "/null"]
Nupanick
quelle
2
+1, Wenn Sie einen Zeichensatz verwenden, um ein Escapezeichen zu vermeiden, wird der RegEx um ein Zeichen länger, aber es lohnt sich für die Lesbarkeit: /[/]/Unterscheidet das nachfolgende Trennzeichen visuell deutlicher als /\//.
Dem Pilafian
2
/[/]/ist einfacher zu lesen und funktioniert, aber leider melden einige RegEx-Validatoren auch innerhalb einer Zeichengruppe "Ein nicht entkoppeltes Trennzeichen muss mit einem Backslash versehen werden" . Also habe ich wieder in die hässliche Form gewechselt . /\//
Dem Pilafian
1

Für mich habe ich versucht, /ein Datum in C # zu finden. Ich habe es nur gemacht mit (\/):

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!");
}

In ähnlicher Weise sollte auch JavaScript verwendet werden können (\/).

vapcguy
quelle
Downvoter, willst du das erklären? Das funktioniert und ich habe das durch Testen bewiesen.
Vapcguy
1
Ich denke, es war ein Unfall, sorry. Ich habe versucht, es rückgängig zu machen, aber es heißt, meine Stimme ist gesperrt, es sei denn, die Antwort wird bearbeitet. Das einzige, was ich sehe, ist, dass Sie ein Protokoll mit der Erfassung von Gruppen haben, die Sie anscheinend nicht verwenden. Gibt es einen Grund, warum alles in Klammern steht?
Ryan Quinn
1
@ RyanQuinn Danke für die Erklärung. Ich habe Klammern verwendet, um Dinge zu gruppieren, um eine bestimmte Ziffer darzustellen, die ich erwartet hatte. Es schien auch erforderlich zu sein, dass sie auf einer Website verwendet wurden, auf der ich sie getestet habe: regexr.com Ich habe meinen Beitrag bearbeitet (am Ende habe ich nur ein Leerzeichen hinzugefügt), sodass Sie die Downvote entfernen können sollten, wenn Sie dies wünschen.
Vapcguy
0

Ich bin beim Extrahieren von durch \und begrenztem Text auf zwei Probleme im Zusammenhang mit dem Vorstehenden gestoßen /und habe eine Lösung gefunden, die zu beiden passt, abgesehen von der Verwendung new RegExp, die \\\\zu Beginn erforderlich ist . Diese Ergebnisse sind in Chrome und IE11.

Der reguläre Ausdruck

/\\(.*)\//g

funktioniert nicht. Ich denke, das //wird trotz des Fluchtcharakters als Beginn eines Kommentars interpretiert. Der reguläre Ausdruck (in meinem Fall gleichermaßen gültig, aber nicht allgemein)

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

geht auch nicht. Ich denke, der zweite /beendet den regulären Ausdruck trotz des Fluchtcharakters.

Was für mich funktioniert, ist darzustellen /als \x2F, was die hexadezimale Darstellung von ist /. Ich denke, das ist effizienter und verständlicher als die Verwendung new RegExp, aber natürlich braucht es einen Kommentar, um den Hex-Code zu identifizieren.

Ronald Davis
quelle
0

Der Schrägstrich ist ein Sonderzeichen. Sie müssen also vor dem Schrägstrich einen Backslash hinzufügen, damit er funktioniert

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

wo / repräsentiert die Suche nach / Auf diese Weise Sie

Junaid Lodhi
quelle