Domanda

Sto lavorando su un AJAX / PHP chatroom e sono attualmente bloccato su l'espressione regolare per rilevare se un utente ha inviare un PM & poi il lavoro di chi si è troppo e ciò che il messaggio è.

Se l'utente digita qualcosa del tipo

  

/ pm PezCuckow Hi There voi in modo impressionante!

Vorrei prima prova se il mio stringa corrispondente quel modello quindi ottenere 'PezCuckow' e 'Hi There così impressionante!' come stringhe di inviare al PHP.

Ho fatto qualche ricerca su regex, ma in realtà non hanno alcuna idea di dove cominciare con questo! Potete aiutarmi?

== Grazie a tutti quanti aiutano questo è ora risolto! ==

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

if(message.match(reg)) {
    m = message.match(reg);
    to = m[1];
    message = m[2];
}
È stato utile?

Soluzione

Hows su questo:

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

che corrisponde "/pm" seguiti da " " spazi bianchi (liberalmente accettare spazi extra), seguito dal \w+ nome utente, seguito da spazi bianchi verremo " ", poi finalmente il .* messaggio (che è praticamente tutto alla fine della linea).

Altri suggerimenti

Questa espressione regolare analizza un messaggio:

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

Spiegazione:

^              # 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

Nel tuo caso ("/pm PezCuckow Hi There you so awesome!"):

  • Gruppo 1: "pm"
  • Gruppo 2: "PezCuckow"
  • gruppo 3: "Hi There così impressionante"

in un caso più generale ("Hi There you so awesome!")

  • Gruppo 1: ""
  • Gruppo 2: ""
  • gruppo 3: "Hi There così impressionante"

Si noti che la barra deve essere sfuggito in JavaScript letterali regex:

/foo\/bar/

, ma non nei modelli regex in generale.

Supponendo che i caratteri unica parola (senza spazi, ecc) sono validi nel campo del nome, questo farà ciò che si vuole:

var re = /(\/\w+) (\w+) (.+)/;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top