/ Sintassi regex PM per l'invio di un messaggio in chat-room
-
19-09-2019 - |
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];
}
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+) (.+)/;