2013-05-20 12 views
51

Nie mam dużego doświadczenia z JavaScript, ale próbuję utworzyć system tagów, który zamiast używać @ lub #, używałby /.Dopasowywanie przedniego ukośnika za pomocą wyrażeń regularnych

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

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

Jak mogę użyć / zamiast #. Próbowałem już wykonać var slash = '/' i dodając + slash +, ale to się nie udało.

+1

Proszę zmienić tytuł. I co tak naprawdę próbujesz zrobić? Po przeczytaniu twojego pytania nadal nie mam pojęcia. – OptimusCrime

+0

Nie jestem pewien, czy rozumiem. –

+2

http://meta.stackexchange.com/a/177767/178816 –

Odpowiedz

71

można uciec w ten sposób.

/\//ig; // Matches/

lub po prostu użyć indexOf

if(str.indexOf("/") > -1) 
+0

Dziękuję Ben, spróbowałem również, ale dodałem jeszcze \ \ na końcu. – iBrazilian2

4

Jeśli chcesz użyć / trzeba uciec z \

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

W wyrażeniach regularnych, „/” jest specjalny znak, który musi być uciekł (AKA oznaczone poprzez umieszczenie \ zanim co niweczy jakąkolwiek wyspecjalizowaną funkcję Może obsługiwać).

Oto co trzeba:

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

Przeczytaj na regex znaków specjalnych tutaj: http://www.regular-expressions.info/characters.html

+6

"/" nie jest znakiem specjalnym w wyrażeniach regularnych. Jest to jednak znak specjalny w JavaScript, który ogranicza miejsce rozpoczęcia i zakończenia regex. – sokkyoku

0

natknąłem dwie kwestie związane z powyższym, przy rozpakowywaniu tekst rozdzielany przez \ i / i znalazł rozwiązanie, które pasuje do obu, poza używaniem new RegExp, które na początku wymaga \\\\. Te odkrycia są w Chrome i IE11.

Wyrażenie regularne

/\\(.*)\//g 

nie działa. Myślę, że // jest interpretowany jako początek komentarza pomimo znaku ucieczki. Wyrażenie regularne (równie ważne w moim przypadku, ale ogólnie nie)

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

też nie działa. Myślę, że drugi / przerywa wyrażenie regularne pomimo znaku escape.

Co działa dla mnie to reprezentowanie / jako \x2F, która jest szesnastkową reprezentacją /. Myślę, że jest to bardziej wydajne i zrozumiałe niż używanie new RegExp, ale oczywiście potrzebuje komentarza, aby zidentyfikować kod szesnastkowy.

0

Forward Slash jest znak specjalny, trzeba dodać backslash przed ukośnikiem, aby to działało

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

gdzie/reprezentuje poszukiwania/ W ten sposób

0

można również pracować wokół specjalnej obsługi JS dla ukośnika, zamykając go w grupie znaków, tak:

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

const word = /[/](\w+)/ig; 
"/dev/null".match(word)  // => ["/dev", "/null"] 
Powiązane problemy