[英]Regex match returns null for no reason
我正在為我的node.js irc bot制作客戶端,並想實現tab完整,但以下代碼中的正則表達式無緣無故地返回null。 我在console.log語句旁邊添加了記錄為注釋的內容。
選項卡完成了什么:我鍵入“ mic”並按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);
您似乎無法從users
那里獲得正確的文本。 由於我不知道您的實際HTML,因此我創建了一個CodePen並注釋掉了一些通道行,並將users
添加為典型數組。 這樣做,您的regex
可以正常工作。
這是正在使用的codePen 。
找出問題所在。 user
被包裹在​
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.