2013-08-29 83 views
0

我正在爲我的node.js irc bot做一個客戶端,並希望實現選項卡完成,但以下代碼中的正則表達式無理由返回null。我已經在console.log語句旁包含了記錄爲註釋的內容。正則表達式匹配返回null無故

什麼是標籤填寫:我鍵入「麥克風」,然後按Tab鍵,它會自動完成到「michael」,因爲他是頻道中的用戶。

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; 
    } 
}); 

正如我所說的,我似乎無法找到對此的解釋是因爲我想在JavaScript控制檯以下和它的作品

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 +''')'它是'user:「michael」'' –

+0

另外,'user'的長度是「michael」的長度的2倍... –