2009-11-12 56 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/ 

但不是在正则表达式模式一般。