/채팅 룸에서 메시지를 보내기위한 PM Regex 구문
-
19-09-2019 - |
문제
나는 Ajax/PHP 채팅방에서 일하고 있으며 현재 REGEX에 갇히고 사용자가 PM을 보내는 지 여부를 감지 한 다음 누가 누구인지, 메시지가 무엇인지 알아 내고 있습니다.
사용자가
/pm pezcuckow 안녕하세요 당신이 너무 굉장합니다!
내 문자열이 그 패턴과 일치하는지 먼저 테스트하고 싶다. 그리고 'Pezcuckow'와 '안녕하세요 당신은 정말 대단합니다!' 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];
}
해결책
이것에 대해 어떻게 :
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, 그리고 마지막으로 메시지가 있습니다 .*
(기본적으로 라인 끝에있는 모든 것).
다른 팁
이 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"
- 그룹 3 : "안녕하세요 당신이 정말 대단합니다!"
보다 일반적인 경우 ("Hi There you so awesome!"
)
- 그룹 1 : ""
- 그룹 2 : ""
- 그룹 3 : "안녕하세요 당신이 정말 대단합니다!"
전진 슬래시는 JavaScript Regex Literals에서 탈출해야합니다.
/foo\/bar/
그러나 일반적으로 Regex 패턴은 아닙니다.
이름 필드에서 단어 문자 (공백 없음 등이 없음) 만 유효하다고 가정하면 원하는 작업을 수행합니다.
var re = /(\/\w+) (\w+) (.+)/;
제휴하지 않습니다 StackOverflow