Rozważmy następujący Unicode ciężki wyrażenia regularnego (emotikonów stojąc na non-ASCII i extra-BMP znaków):Kolejność logiczną OR w ES6/Unicode wyrażenia regularnego w Chrome ✗ vs Firefox ✓
''.match(/||/ug)
Firefox zwraca [ "", "", "", "", "", "" ]
.
Chrome 52.0.2743.116 i węzeł 6.4.0 oba zwracają null
! Nie wydaje mi się, żebym dbał o to, czy wstawię ciąg znaków do zmiennej i czynię str.match(…)
, czy też nie zbuduję obiektu RegExp przez new RegExp('||', 'gu')
.
(Chrome jest ok tylko z Oring dwa sekwencje: ''.match(/|/ug)
jest ok Jest to również ok z non-Unicode. 'aakkzzkkaa'.match(/aa|kk|zz/ug)
działa.)
robię coś źle? Czy to błąd przeglądarki Chrome? ECMAScript compatibility table mówi, że powinienem być w porządku z wyrażeń regularnych Unicode.
(PS:..? Trzy emotikonów użyta w tym przykładzie są tylko stand-ins W mojej aplikacji, będą arbitralne, lecz odrębne ciągi Ale zastanawiam się, czy fakt, że ''.match(/[]/ug)
działa w Chrome jest istotne)
Może jestem konserwatywny, ale to byłoby łatwiejsze do odczytania z 'foo',' bar' i 'baz' lub' A', 'B' i' C'. Plus wiele czcionek nadal nie robi wszystkich emotikonów, więc jeśli komuś brakuje dwóch z nich, zobaczą je jako kwadrat - lub co gorsza wszystkie trzy. –
@CaptainMan na świecie mówi wieloma językami, z których wiele jest napisanych za pomocą znaków spoza ASCII lub (gasp!). Używam emoji jako standinu dla tych postaci. (Również wskazuję we wpisie, że ten sam przykład działa z ASCII, więc jest to problem z Unicode.) Aktualizowanie tytułu w celu podkreślenia Unicode. –
Teraz widzę, że część punktu dotyczyła unikodu (początkowo go brakowało). Nadal uważam, że więcej "waniliowych" znaków unicode byłoby lepszych niż emoji. –