Nie mam dużego doświadczenia z JavaScript, ale próbuję stworzyć system tagów, który zamiast używać @
lub #
, używałby /
.
var start = /#/ig; // @ Match
var word = /#(\w+)/ig; //@abc Match
Jak mogę użyć /
zamiast #
. Próbowałem robić var slash = '/'
i dodawać + slash +
, ale to się nie udało.
javascript
regex
iBrazilian2
źródło
źródło
Odpowiedzi:
Możesz uciec od tego w ten sposób.
/\//ig; // Matches /
lub po prostu użyj indexOf
if(str.indexOf("/") > -1)
źródło
Musisz uciec
/
z\
./\//ig // matches /
źródło
Jeśli chcesz użyć
/
, musisz uciec z rozszerzeniem\
var word = /\/(\w+)/ig;
źródło
W wyrażeniach regularnych „/” jest znakiem specjalnym, który musi zostać zmieniony (AKA oflagowany przez umieszczenie przed nim \, co neguje jakąkolwiek wyspecjalizowaną funkcję, którą może służyć).
Oto, czego potrzebujesz:
var word = /\/(\w+)/ig; // /abc Match
Przeczytaj więcej o znakach specjalnych RegEx tutaj: http://www.regular-expressions.info/characters.html
źródło
Możesz także obejść specjalną obsługę ukośnika w JS, umieszczając go w grupie znaków, na przykład:
const start = /[/]/g; "/dev/null".match(start) // => ["/", "/"] const word = /[/](\w+)/ig; "/dev/null".match(word) // => ["/dev", "/null"]
źródło
/[/]/
wizualnie odróżnia końcowy separator wyraźniej niż/\//
./[/]/
jest łatwiejszy do odczytania i działa, ale niestety, niektóre walidatory wyrażeń regularnych zgłaszają, że „separator bez znaku zmiany znaczenia musi być poprzedzony ukośnikiem odwrotnym” nawet w obrębie grupy znaków . Więc wróciłem do brzydkiej/\//
formy.Możesz temu zapobiec, poprzedzając go
\
(tworząc\/
), lub możesz użyć,new RegExp('/')
aby uniknąć ucieczki z wyrażenia regularnego .Zobacz przykład w JSFiddle .
'/'.match(/\//) // matches / '/'.match(new RegExp('/') // matches /
źródło
Dla mnie próbowałem dopasować
/
datę w języku C #. Zrobiłem to po prostu używając(\/)
: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 powinien również mieć możliwość podobnego użycia
(\/)
.źródło
Napotkałem dwa problemy związane z powyższym podczas wyodrębniania tekstu ograniczonego przez
\
i/
i znalazłem rozwiązanie, które pasuje do obu, inne niż użycienew RegExp
, które wymaga\\\\
na początku. Te wyniki są w Chrome i IE11.Wyrażenie regularne
/\\(.*)\//g
nie działa. Myślę, że
//
jest to interpretowane jako początek komentarza pomimo postaci ucieczki. Wyrażenie regularne (równie ważne w moim przypadku, ale nie ogólnie)też nie działa. Myślę, że
/
mimo znaku ucieczki, druga kończy wyrażenie regularne.To, co działa dla mnie, to reprezentowanie
/
jako\x2F
, co jest reprezentacją szesnastkową/
. Myślę, że jest to bardziej wydajne i zrozumiałe niż używanienew RegExp
, ale oczywiście wymaga komentarza, aby zidentyfikować kod szesnastkowy.źródło
Ukośnik w przód to znak specjalny, więc musisz dodać ukośnik odwrotny przed ukośnikiem, aby działał
$patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";
gdzie / reprezentuje wyszukiwanie / W ten sposób Ty
źródło