2009-11-12 66 views
0

我正在研究AJAX/PHP聊天室,並且目前卡在正則表達式中以檢測用戶是否發送了PM &然後找出它是誰以及消息是。/PM用於在聊天室發送消息的正則表達式語法

如果用戶鍵入類似

/PM PezCuckow您好你如此真棒!

我想先測試一下我的字符串是否匹配那個模式,然後得到'PezCuckow'和'Hi你真棒!作爲發佈到PHP的字符串。

我已經做了一些正則表達式的研究,但真的不知道從哪裏開始這一個! 你能幫忙嗎?

==多虧了大家的幫助,這是目前解決==

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

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

回答

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,然後最後是消息.*(它基本上是所有行結束的地方)。

0

假設隻字字符(無空格等)都在名稱字段有效,這會做你想要的!

var re = /(\/\w+) (\w+) (.+)/; 
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: 「PM」
  • 組2 :「PezCuckow」
  • 第3組:「你好,你真棒!」
在更一般的情況下( "Hi There you so awesome!"

  • 組1

    : 「」

  • 組2: 「」
  • 組3: 「嗨,你有這樣真棒」

注意,正斜槓需要JavaScript的正則表達式文字進行轉義:

/foo\/bar/ 

但不是在正則表達式模式一般。

相關問題