Frage

Ich arbeite an einem AJAX / PHP Chatroom und bin zur Zeit auf der regex stecken zu erkennen, wenn ein Benutzer eine PM hat schicken und dann herauszufinden, wer es ist zu und was die Botschaft ist.

Wenn der Benutzer so etwas wie

  

/ pm PezCuckow Hallo Es Sie so awesome!

würde ich zum ersten Test mag, wenn mein String abgestimmt, dass Muster erhalten ‚PezCuckow‘ dann und ‚Hallo Es Ihnen so awesome!‘ als Strings an die PHP zu veröffentlichen.

Ich habe einige der Forschung auf Regex getan, aber habe wirklich keine Ahnung, wo mit diesem starten! Können Sie helfen?

== Dank jedermanns helfen, dies jetzt gelöst! ==

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

if(message.match(reg)) {
    m = message.match(reg);
    to = m[1];
    message = m[2];
}
War es hilfreich?

Lösung

Hows dazu:

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

Dass Streichhölzer "/pm" Leerzeichen " " gefolgt (zügig zusätzliche Leerzeichen zu akzeptieren), gefolgt von dem Benutzername \w+, gefolgt von Leerzeichen " " agin, dann schließlich der Nachricht .* (die im Grunde alles, was bis zum Ende der Zeile ist).

Andere Tipps

Diese Regex analysiert eine Nachricht an:

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

Erklärung:

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

In Ihrem Fall ("/pm PezCuckow Hi There you so awesome!"):

  • Gruppe 1: "pm"
  • Gruppe 2: "PezCuckow"
  • Gruppe 3: "Hallo Es Sie so awesome"

in einem allgemeineren Fall ("Hi There you so awesome!")

  • Gruppe 1: ""
  • Gruppe 2: ""
  • Gruppe 3: "Hallo Es Sie so awesome"

Beachten Sie, dass der Schrägstrich Bedürfnisse in JavaScript Regex-Literale maskiert werden:

/foo\/bar/

, aber nicht in regex Mustern im Allgemeinen.

Unter der Annahme, dass nur Wortzeichen (keine Leerzeichen, etc.) sind im Namensfeld gültig, dies würde tun, was Sie wollen:

var re = /(\/\w+) (\w+) (.+)/;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top