0

私はAJAX/PHPチャットルームに取り組んでおり、現在、ユーザーがPMを送信したかどうかを検出し、それが誰で、メッセージが何であるかを調べるために正規表現に固執しています。

ユーザーが次のようなものを入力した場合

/pm PezCuckow こんにちは!

最初に文字列がそのパターンに一致するかどうかをテストしてから、「PezCuckow」と「Hi There you so awesome!」を取得したいと思います。PHP に投稿する文字列として。

私は正規表現についていくつかの調査を行いましたが、これをどこから始めるべきか本当にわかりません! 手伝ってくれますか?

==みんなの助けのおかげで、これは解決しました!==

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

if(message.match(reg)) {
    m = message.match(reg);
    to = m[1];
    message = m[2];
}
4

3 に答える 3

2

この正規表現はメッセージを解析します:

^(?:\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: "PezCuckow"
  • グループ 3: 「やあ、すごいね!」

より一般的な場合 ( "Hi There you so awesome!")

  • グループ 1: ""
  • グループ 2: ""
  • グループ 3: 「やあ、すごいね!」

JavaScript 正規表現リテラルではスラッシュをエスケープする必要があることに注意してください。

/foo\/bar/

一般的な正規表現パターンではありません。

于 2009-11-12T14:39:16.553 に答える
1

これはいかがですか:

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+、空白" "agin、最後にメッセージ.*(基本的には行末までのすべて) が続きます。

于 2009-11-12T14:35:17.500 に答える
0

名前フィールドで単語文字のみ (スペースなどを含まない) が有効であると仮定すると、これはあなたが望むことを行います:

var re = /(\/\w+) (\w+) (.+)/;
于 2009-11-12T14:35:05.827 に答える