Синтаксис регулярного выражения /PM для отправки сообщения в чат

StackOverflow https://stackoverflow.com/questions/1722547

  •  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+) (.+)/;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top