代码之家  ›  专栏  ›  技术社区  ›  Pez Cuckow

/用于在聊天室中发送消息的pm regex语法

  •  0
  • Pez Cuckow  · 技术社区  · 15 年前

    我正在开发一个Ajax/PHP聊天室,目前我一直在使用regex来检测用户是否发送了PM&然后确定它是谁以及消息是什么。

    如果用户键入类似

    /佩斯卡科总理你好,你太棒了!

    我想先测试一下我的线是否符合这个模式,然后得到“pezcackow”和“嗨,你太棒了!”作为要发布到PHP的字符串。

    我对regex做了一些研究,但真的不知道从哪里开始! 你能帮忙吗?

    ==多亏了大家的帮助,这个问题现在解决了!=

    var reg = /^\/pm\s+(\w+)\s+(.*)$/i;
    var to = "";
    
    if(message.match(reg)) {
        m = message.match(reg);
        to = m[1];
        message = m[2];
    }
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Roatin Marth    15 年前

    这个怎么样:

    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+ ,后面是空白 “”“ 阿金,最后是留言 .* (基本上都是这样)。

        2
  •  2
  •   Tomalak    15 年前

    此regex解析消息:

    ^(?:\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”
    • 第三组:“你好,你太棒了!”

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

    • 第1组:“
    • 第2组:“
    • 第三组:“你好,你太棒了!”

    请注意,正斜杠需要在javascript regex文本中转义:

    /foo\/bar/
    

    但一般来说,不是在regex模式中。

        3
  •  0
  •   Jerod Venema    15 年前

    假设只有单词字符(没有空格等)在“名称”字段中有效,这将满足您的需要:

    var re = /(\/\w+) (\w+) (.+)/;