Синтаксис регулярного выражения /PM для отправки сообщения в чат
-
19-09-2019 - |
Вопрос
Я работаю над чатом AJAX/PHP и в настоящее время застрял в регулярном выражении, чтобы определить, отправил ли пользователь личное сообщение, а затем выяснить, кто это и что это за сообщение.
Если пользователь вводит что-то вроде
/pm PezCuckow Привет, ты такой классный!
Я хотел бы сначала проверить, соответствует ли моя строка этот шаблон, тогда получите «Pezcuckow» и «Привет, вы так здорово!» как струны, чтобы опубликовать PHP.
Я провел некоторое исследование регулярных выражений, но понятия не имею, с чего начать!Вы можете помочь?
== Спасибо всем за помощь, теперь проблема решена! ==
var reg = /^\/pm\s+(\w+)\s+(.*)$/i;
var to = "";
if(message.match(reg)) {
m = message.match(reg);
to = m[1];
message = m[2];
}
Решение
Как насчет этого:
var reg = /^\/pm\s+(\w+)\s+(.*)$/i,
m = '/pm PezCuckow Hi There you so awesome!'.match(reg);
m[0]; // "PezCuckow"
m[1]; // "Hi There you so awesome!"
Это соответствует "/pm"
за которым следуют пробелы " "
(допускаются дополнительные пробелы), за которым следует имя пользователя \w+
, за которым следует пробел " "
снова, затем, наконец, сообщение .*
(что в основном все до конца строки).
Другие советы
Это регулярное выражение анализирует сообщение:
^(?:\s*/(\w+)\s*(\w*)\s*)?((?:.|[\r\n])*)$
Объяснение:
^ # start-of-string
(?: # start of non-capturing group
\s*/ # a "/", preceding whitespace allowed
(\w+) # match group 1: any word character, at least once (e.g. option)
\s+ # delimiting white space
(\w*) # match group 2: any word character (e.g. target user)
\s+ # delimiting white space
)? # make the whole thing optional
( # match group 3:
(?: # start of non-capturing group, either
. # any character (does not include newlines)
| # or
[\r\n] # newline charaters
)* # repeat as often as possible
) # end match group 3
В твоем случае ("/pm PezCuckow Hi There you so awesome!"
):
- группа 1:"вечера"
- группа 2:"ПезКуков"
- группа 3:«Привет, ты такой классный!»
в более общем случае ("Hi There you so awesome!"
)
- группа 1:""
- группа 2:""
- группа 3:«Привет, ты такой классный!»
Обратите внимание, что косая черта должна быть экранирована в литералах регулярных выражений JavaScript:
/foo\/bar/
но не в шаблонах регулярных выражений в целом.
Предполагая, что в поле имени допустимы только символы слова (без пробелов и т. д.), это будет делать то, что вы хотите:
var re = /(\/\w+) (\w+) (.+)/;