我正在开发一个 AJAX/PHP 聊天室,目前我一直在使用正则表达式来检测用户是否发送了私信,然后找出它是谁以及消息是什么。

如果用户输入类似的内容

/pm PezCuckow 嗨,你太棒了!

我想首先测试如果我的字符串与该图案匹配,然后获得“ pezcuckow”和“嗨,你真棒!”作为邮寄到PHP的字符串。

我对正则表达式做了一些研究,但真的不知道从哪里开始!你能帮我吗?

==感谢大家的帮助,现在已经解决了!==

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

if(message.match(reg)) {
    m = message.match(reg);
    to = m[1];
    message = m[2];
}
有帮助吗?

解决方案

了解这个怎么样了:

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,然后最终消息.*(这基本上一切到行的结尾)。

其他提示

此正则表达式解析一条消息:

^(?:\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 组:《佩兹库克》
  • 第 3 组:“嗨,你真棒!”

在更一般的情况下("Hi There you so awesome!")

  • 第 1 组:””
  • 第 2 组:””
  • 第 3 组:“嗨,你真棒!”

请注意,JavaScript 正则表达式中的正斜杠需要转义:

/foo\/bar/

但一般而言,正则表达式模式中并非如此。

假设只字字符(无空格等)都在名称字段有效,这会做你想要什么:

var re = /(\/\w+) (\w+) (.+)/;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top