/PM синтаксис регулярных выражений для отправки сообщения в чат-комнату
Я работаю в чате AJAX/PHP и в настоящее время застрял в регулярном выражении, чтобы определить, отправил ли пользователь PM, а затем выяснить, кто это и что это за сообщение.
Если пользователь вводит что-то вроде
/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];
}
3 ответа
Как насчет этого:
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: "PezCuckow"
- группа 3: "Привет, ты такой классный!"
в более общем случае ("Hi There you so awesome!"
)
- группа 1: ""
- группа 2: ""
- группа 3: "Привет, ты такой классный!"
Обратите внимание, что косую черту необходимо экранировать в литералах регулярных выражений JavaScript:
/foo\/bar/
но не в регулярных выражениях в целом.
Предполагая, что в поле имени допустимы только слова (без пробелов и т. Д.), Это будет делать то, что вы хотите:
var re = /(\/\w+) (\w+) (.+)/;