문제

나는 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+) (.+)/;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top