2014-09-24 2 views
0

나는 특정 트리거 단어를 찾고 그 트리거 단어를 기반으로 URL로 회신하는 간단한 Hubot 스크립트를 가지고 있습니다.Hubot 정규식 - 모든 것을 시도하기보다는 첫 번째 경기에서 멈추는가?

약간 인위적인 예 :

robot.hear /CAT/i, (msg) -> 
    msg.send "This is a URL - www.example.com/browse/cats" 
robot.hear /YELLOWBIRD/i, (msg) -> 
    msg.send "This is a URL - www.example.com/browse/yellowbirds" 
robot.hear /BIRD/i, (msg) -> 
    msg.send "This is a URL - www.example.com/browse/birds" 

문제가 트리거 워드 (조류) 중 하나는 다른 트리거 워드 (방울새)의 스트링이다.

이 경우 특정 정규식 (YELLOWBIRD)에서만 트리거하고 싶습니다. 그러나

는 Hubot 현재 모두 정규 표현식에 에서 트리거 - 그것은으로 보내실 즉 :

This is a URL - www.example.com/browse/yellowbirds 
This is a URL - www.example.com/browse/birds 

경우처럼 정규 표현식에 목록을 치료 Hubot이 할 수있는 방법이 있나요 -, 그것은 것 같이 그것들을 통해 위로부터 작업하십시오. 그리고 처음에 그것이 부딪치게되면, 그것은 부서져서 나머지 것들을 처리하지 않을 것입니다. (또는 거기에 노란색이있는 경우 "BIRD"정규식을 무시하는 방법이있을 수 있습니다).

그리고 보너스 질문 - 어쩌면이 정규 표현식과 답장을 구성하는 더 좋거나 더 관용적 인 방법이 있을까요? 어떤 종류의 조회 테이블이나 뭐?

답변

0

당신은 단어을 찾고 있지만 정규 표현식은 문자열을 찾고 있다고 말합니다. 당신이 정말로 단어와 일치 할 경우 당신은 당신의 정규 표현식에로 일부 \bs을 던져 수 :

\b
는 편지와 공간 사이로서, 제로 폭 단어 경계와 일치합니다.

그래서 당신은 말할 수있다 : 당신의 /\bBIRD\b/i 'big bird'하지만 'angry yellowbird' 또는 'blackbird pie' 일치합니다

robot.hear /\bCAT\b/i, (msg) -> ... 
robot.hear /\bYELLOWBIRD\b/i, (msg) -> ... 
robot.hear /\bBIRD\b/i, (msg) -> ... 

있도록.

당신은 아직도 당신이 바로 믹스에이 같은 일을 간단한 조건을 던져 수 'blackbird'를 일치 시키려면 :

robot.hear /(\S*)bird/i, (msg) -> 
    if((msg.match[1] || '').toLowerCase() !== 'yellow') 
    # respond in here... 

나는 쉽게 그래서 그와 함께 재생할 수있는 Hubot 설정이없는 마지막 하나는 옳지 않을 수도 있지만 잘하면 그것은 아이디어를 설명하기에 충분합니다.

1

이 시도 :

robot.hear /CAT/i, (msg) -> 
    msg.send "This is a URL - www.example.com/browse/cats" 
    msg.finish() 
robot.hear /YELLOWBIRD/i, (msg) -> 
    msg.send "This is a URL - www.example.com/browse/yellowbirds" 
    msg.finish() 
robot.hear /BIRD/i, (msg) -> 
    msg.send "This is a URL - www.example.com/browse/birds" 
    msg.finish() 
+0

'msg.finish을()'정말 날 hubot을 완화하는 데 도움이 – approximatenumber

관련 문제