本题主要考察正则表达式,坑点有二:
1.input空间的value值包含正则表达式中的特殊字符时需要转义
2.正则表达式应避免使用全局匹配(//g),可能会造成结果横跳
function suggest(items) { var input = document.querySelector('.js-input'); const regKeys = ['(', ')', '.', '?', '^', '/', '\\', '*', '[', ']', '|', '+', '{', '}', '$']; // ul 初始化, 清除所以li var suggestContent = document.querySelector('.js-suggest') while (suggestContent.children[0].children.length > 0) { suggestContent.children[0].children[0].remove(); } // console.log(items); var value = input.value.trim(); var charArray = value.split(''); for (var i = 0; i < charArray.length; i++) { if (regKeys.includes(charArray[i])) { charArray[i] = '\\' + charArray[i]; } } // var reg = RegExp(charArray.join('.*?') + '.*?','g'); // 不能用 var reg = RegExp(charArray.join('.*?') + '.*?'); console.log(reg); // console.log(reg.test('110')); if (!value) { suggestContent.className = 'js-suggest hide'; return; } items.forEach(function(item, index) { console.log(item, reg.test(item)); console.log(item, reg.test(item)); if (reg.test(item)) { console.log('匹配成功', item); var li = document.createElement('li'); li.innerHTML = item; suggestContent.children[0].appendChild(li); } }); if (suggestContent.children[0].children.length === 0) { suggestContent.className = 'js-suggest hide'; } else { suggestContent.className = 'js-suggest'; } console.log(suggestContent.className.indexOf('hide')); console.log(suggestContent.children[0]); console.log(suggestContent.children[0].children.length); }