/PM 用于在聊天室发送消息的正则表达式语法
-
19-09-2019 - |
题
我正在开发一个 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+) (.+)/;
不隶属于 StackOverflow