Javascript 正则表达式匹配无理由返回null
我正在为node.js irc bot创建一个客户端,并希望实现tab complete,但下面代码中的正则表达式毫无理由返回null。我在console.log语句旁边添加了作为注释记录的内容 tab完成:我键入“mic”并按tab键,它会自动将其完成为“michael”,因为他是该频道的用户Javascript 正则表达式匹配无理由返回null,javascript,jquery,regex,Javascript,Jquery,Regex,我正在为node.js irc bot创建一个客户端,并希望实现tab complete,但下面代码中的正则表达式毫无理由返回null。我在console.log语句旁边添加了作为注释记录的内容 tab完成:我键入“mic”并按tab键,它会自动将其完成为“michael”,因为他是该频道的用户 tabStart = false; $("#textbox").keydown(function (e) { if (!$(this).val().length) return; if
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;
}
});
似乎您在从
用户
获取正确文本时遇到问题。由于我不知道您的实际HTML,我创建了一个代码笔,注释掉了一些频道行,并添加了用户
,作为一个典型的数组。这样做,您的regex
工作正常
这是你的电话号码 解决了这个问题<代码>用户被包装在
和#8203中
我看到您使用了console.log
来帮助调试,这很好,但有时它会隐藏空白。尝试添加分隔符、引号或第二个参数,例如console.log('user:“+user+”,user=='michael')代码>,您可能会发现需要修剪字段。对象和文本正则表达式对我都适用。“一定有别的事发生了。”保罗:没有。它仍然是“迈克尔”。你能为我们建立一个代码笔吗?事实上,问题在于用户user==“michael”
返回false,但我检查了它,它是一个字符串
,当我console.log('user:“+user+”)
时,它是用户:“michael”
var regex = new RegExp("^mic.*", "i");"michael".match(regex);