2013-08-29 1 views
0

내 node.js irc bot에 대한 클라이언트를 만들고 있으며 탭을 구현하려고하지만 다음 코드의 정규식은 아무 이유없이 null을 반환합니다. 나는 console.log 문 옆에 코멘트로 기록 된 것을 포함시켰다.정규식 일치는 아무 이유없이 null을 반환합니다.

탭 완성 : "마이크"를 입력하고 탭을 누르면 채널의 사용자이기 때문에 자동으로 "마이클"로 완성됩니다.

tabStart = false; 
$("#textbox").keydown(function (e) { 
    if (!$(this).val().length) return; 
    if (e.keyCode === 9) { 
     e.preventDefault(); 
     var text = $(this).val(); 
     console.log('text: ' + text);// mic 
     var index = text.lastIndexOf(" "); 
     console.log('index: ' + index);// -1 
     if (!tabStart) { 
      tabStart = index > -1 ? text.substr(index + 1) : text; 
      var current = ''; 
     } else { 
      var current = index > -1 ? text.substr(index + 1) : text; 
     } 
     console.log('tabStart: ' + tabStart);// mic 
     console.log('current: ' + current);// 
     var active = $("#tabs").tabs("option", "active"); 
     var channel = $("#tabs ul>li a").eq(active).attr("href"); 
     console.log('channel: ' + channel);// #debug 
     var users = $(channel + " .user-list li"); 
     var regex = new RegExp("^" + tabStart + ".*", "i"); 
     console.log('regex: ' + regex);// /^mic.*/i 
     for (var i = 0; i < users.length; ++i) { 
      var user = $(users[i]).text(); 
      console.log('user: ' + user);// michael 
      var match = user.match(regex); 
      console.log('match: ' + match);// null 
      if (match) { 
       var newText = (index > -1 ? text.substr(0, index + 1) : "") + user; 
       console.log('newText: ' + newText); 
       $(this).val(newText); 
       break; 
      } 
     } 
    } else { 
     tabStart = false; 
    } 
}); 

나는 내가 자바 스크립트 콘솔에서 다음을 시도하기 때문에 나는이에 대한 설명을 찾을 수 없습니다, 말했듯이 당신은 점점 문제가있는 것처럼 그것은 보인다

var regex = new RegExp("^mic.*", "i");"michael".match(regex); 
+0

디버깅에 도움이되는'console.log'를 사용했음을 알았습니다. 그러나 그것은 때로는 공백을 숨 깁니다. 구분 기호, 따옴표 또는 두 번째 인수를 추가하십시오. 'console.log ('user :' '+ user +' '', user === 'michael');'필드를 다듬어야한다는 것을 알 수 있습니다. –

+0

개체와 리터럴 정규 표현식 모두 나를 사용할 수 있습니다. 다른 일이 계속되어야합니다. – kikuchiyo

+0

@paul nope. 그것은 여전히 ​​"마이클"입니다. –

답변

0

문제를 파악했습니다. user&#8203;에 싸여있었습니다.

0

를 작동 users의 올바른 텍스트 실제 HTML을 모르므로 CodePen을 만들고 일부 채널을 주석 처리하고 users을 일반적인 배열로 추가했습니다. 그렇게하면 regex이 정상적으로 작동합니다.

여기에 codePen in action입니다.

+0

실제로 문제는 사용자와 관련이 있습니다. 'user == "michael"'은 false를 반환했지만, 나는'string'이고 console.log ('user : "+ 사용자 +'" ')'user : "michael"' –

+0

또한 'user'의 길이는 2 더 "michael"의 길이 ... –

관련 문제