Niedawno mieliśmy błąd, gdy inny programista zmienił literaturę RegExp na wywołanie konstruktora, a ja zastanawiałem się, dlaczego jest jakakolwiek różnica. Dokładna kodowymRóżnice między literałem regexp JavaScript a konstruktorem
var parts = new RegExp("/rt:([^@]+)@(\d+)/").exec(tag);
vs oryginału
var parts = /rt:([^@]+)@(\d+)/.exec(tag);
Gdy tag
jest przykładowo rt:[email protected]
, pierwszy (błędy) wywołanie wraca null
, natomiast drugi powraca ["rt:[email protected]", "60C1C036-42FA-4073-B10B-1969BD2358FB", "00000000077"]
Nie trzeba dodawać, że cofnąłem zmianę, ale chciałbym się dowiedzieć, dlaczego istnieje taka różnica.
Dobra odpowiedź, pomyśl, że usunę mój! Co zrobić, jeśli chcesz ponownie użyć określonego RegExp - czy to nie jest dobry czas na użycie konstruktora? A może po prostu wypowiesz 'var resuasableRegex =/.. pattern ../;'? –
@ ElRonnoco: Dokładnie, możesz także przypisać literał regex do zmiennej. –
Dzięki za informacje. Następnym razem lepiej przyjrzę się strunom, aby upewnić się, że nie ma potrzebnych znaków ucieczki. W każdym razie dosłowne jest znacznie łatwiejsze na pewno. –