2015-04-20 37 views
5

Chcę dopasować wszystkich wymienionych użytkowników w komentarzu. Przykład:JavaScript - dopasuj symbole non-ascii używając regex

var comment = '@Agneš, @Petar, please take a look at this'; 
 
var mentionedUsers = comment.match(/@\w+/g); 
 

 
console.log(mentionedUsers)

Czekam ["@Agneš", "@Petar"] ale coraz ["@Agne", "@Petar"]. Jak widzisz, symbol š nie jest zgodny.

Jak mogę dopasować wszystkie symbole literowe obejmują non-ascii?

+1

Upewnij się, że znaki specjalne są konwertowane na ich zwykły odpowiednik, ponieważ są wpisywane w polu komentarza, a problem nie wystąpi. – adeneo

+1

"znaki specjalne"? w jakim świecie żyjesz? są to całkowicie normalne litery Unicode. Jest to problem z JavaScriptem (na chwilę dłużej). – Touffy

+0

Znak specjalny, jak we wszystkim, co nie jest "a-z". Po prostu konwersja nazwisk w polu komentarza, jak na razie jest to miejsce, w którym aktualnie się znajdujesz, jest najłatwiejsza. – adeneo

Odpowiedz

4

Do realizowany jest wsparcie dla Unicode w ES6 regex, można obejść z somehting jak:

/@[^\s,]+/g 

gdzie po prostu listę rzeczy, które nie mogą być w nazwach użytkowników. W przyszłym roku

/@\w+/gu 

sposób, aby upewnić się, że nie dostaniesz połówki adresy e-mail i innych przypadkach, gdy @ znajduje się w środku wyrazu byłoby match(/[^\s,@]*@[^\s,@]+(?=[\s,]|$)/g) a następnie filter wyniki dotyczące tego, czy zaczną z "@".

+2

Mimo że daleki od doskonałości. Dopasuje części adresów e-mail i bez lookbehind (co nie jest obsługiwane w JavaScript), niewiele możemy z tym zrobić. – Touffy

+0

Świetna odpowiedź, dziękuję @ Touffy! –

-1

š nie jest znakiem słownym, a "w" jest znakiem słownym.

+0

W PHP Python '' š'' jest zwykłą literą. Nie mogę uwierzyć, że JS nadal nie ma pełnej obsługi UTF. –