我正在开发一个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];
}
答案 0 :(得分: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!"
):
在更一般的情况下("Hi There you so awesome!"
)
请注意,正斜杠需要在JavaScript正则表达式文字中进行转义:
/foo\/bar/
但不是一般的正则表达式。
答案 1 :(得分: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,最后是消息{ {1}}(基本上是行尾的所有内容)。
答案 2 :(得分:0)
假设在名称字段中只有单词字符(没有空格等)有效,这就可以做你想要的:
var re = /(\/\w+) (\w+) (.+)/;