/PM 用于在聊天室中发送消息的正则表达式语法
Posted
技术标签:
【中文标题】/PM 用于在聊天室中发送消息的正则表达式语法【英文标题】:/PM regex syntax for sending message in chat-room 【发布时间】:2009-11-12 14:28:06 【问题描述】:我正在开发 AJAX/php 聊天室,目前卡在正则表达式上,以检测用户是否发送了 PM,然后确定它是谁以及消息是什么。
如果用户键入类似的内容
/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];
【问题讨论】:
【参考方案1】:这个正则表达式解析一条消息:
^(?:\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!"
):
在更一般的情况下 ("Hi There you so awesome!"
)
请注意,在 javascript 正则表达式中需要对正斜杠进行转义:
/foo\/bar/
但不是一般的正则表达式模式。
【讨论】:
【参考方案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,最后是消息.*
(基本上是行尾)。
【讨论】:
【参考方案3】:假设在名称字段中只有单词字符(没有空格等)是有效的,这会做你想要的:
var re = /(\/\w+) (\w+) (.+)/;
【讨论】:
以上是关于/PM 用于在聊天室中发送消息的正则表达式语法的主要内容,如果未能解决你的问题,请参考以下文章