Pregunta

Estoy trabajando en una sala de chat AJAX / PHP y actualmente estoy atascado en la expresión regular para detectar si un usuario tiene enviar un PM y luego trabajar de quién se trata también, y cuál es el mensaje.

Si el usuario escribe algo así como

  

/ h PezCuckow Hola Allí tan impresionante!

Me gustaría probar primero si mi cadena coincidente ese patrón a continuación, obtener 'PezCuckow' y 'Hola Allí tan impresionante!' como cadenas de publicar en la PHP.

He hecho algunas investigaciones sobre expresiones regulares, pero en realidad no tienen idea de por dónde empezar con este! Puede ayudar?

== Gracias a gustos ayudan a esto ahora está resuelto! ==

var reg = /^\/pm\s+(\w+)\s+(.*)$/i;
var to = "";

if(message.match(reg)) {
    m = message.match(reg);
    to = m[1];
    message = m[2];
}
¿Fue útil?

Solución

Hows acerca de esto:

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!"

Eso partidos "/pm" seguidos por " " espacios en blanco (liberalmente aceptar espacios adicionales), seguido por el \w+ nombre de usuario, seguido de Agin " " espacios en blanco, y finalmente la .* mensaje (que es básicamente todo para el final de la línea).

Otros consejos

Esta expresión regular analiza un mensaje:

^(?:\s*/(\w+)\s*(\w*)\s*)?((?:.|[\r\n])*)$

Explicació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

En su caso ("/pm PezCuckow Hi There you so awesome!"):

  • Grupo 1: "pm"
  • grupo 2: "PezCuckow"
  • Grupo 3: "! Hola Allí tan impresionante"

En un caso más general ("Hi There you so awesome!")

  • grupo 1: ""
  • grupo 2: ""
  • Grupo 3: "! Hola Allí tan impresionante"

Tenga en cuenta que la barra diagonal necesita ser escapado en los literales de expresiones regulares de JavaScript:

/foo\/bar/

pero no en los patrones de expresiones regulares en general.

Si se asume que la única palabra caracteres (sin espacios, etc.) son válidos en el campo Nombre, esto va a hacer lo que quiere:

var re = /(\/\w+) (\w+) (.+)/;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top