2016-02-21 1 views
6

У меня есть эта строка:Как я могу сопоставить все после @ до места?

var str = 'این یک @پیا.م تست است'; 
// I want this  ^^^^^ 

я могу выбрать его, как это:

/@(.{5})/ 

Но это не то, что мне нужно, потому что длина этого слова, который после @ и перед пространством не всегда 5. Я действительно не знаю почему \w не соответствует персидским символам. Или даже [a-zA-Z] тоже не работает.

Ну, как я могу это сделать?

+0

'\ w' is' [a-zA-Z0-9_] ',' [a-zA-Z] 'для латинских букв, потому что персидские буквы не входят в диапазон латинского Unicode. – Xufox

+0

@Xufox Ну, как я могу использовать букву Unicode в регулярном выражении? – stack

+6

Вы можете использовать: '/ @ (\ S *) /' –

ответ

3

Вы можете использовать follwing регулярное выражение, которое будет возвращать ничего beteen @ и фот .:

@(.*?)[\s]

@: соответствует символу @ буквально

(*. ?): соответствует любому символу (кроме символа новой строки)

\ s: соответствует любому белому символу пробела [\ г \ п \ т \ е]

Надеется, что это помогает.

+0

Эта точка является частью того, что мне нужно выбрать, я хочу это точно: 'پیا.م' – stack

+0

You хотите ли слово между '@' и '.' + одним символом ?! или между '@' и пространством? –

+0

Нет, я хочу, чтобы все между '@' и {пробелом} – stack

1

Ниже регулярное выражение будет работать

/@(.*?)\s/ 
2

Как независимый подход Unicocde вы можете просто использовать отрицанием класс символов:

'@([^ ]+)' 

Смотрите демо https://regex101.com/r/oD9hV0/1

+1

@stack Добро пожаловать. – Kasramvd

2

Самый короткий путь, если у вас есть PCRE (который вы делаете в Javascript):

str.match(/@(\S+)/) 

Это @ -знак, за которым следует как минимум одно не-пространство. Большинство других экранов класса символов также имеют заглавные версии, которые означают не это, например. \D для нет цифр.

Смежные вопросы