gpt4 book ai didi

javascript - Typeahead 无效的正则表达式 :/(/:

转载 作者:行者123 更新时间:2023-11-30 11:45:26 25 4
gpt4 key购买 nike

我添加了预输入搜索。一切正常,但我发现了一个问题。我的 json 中有文本,例如 “嗨,我叫 Jason (Mckay) 并且......”

当我尝试从这个字符串中输入一些单词时,everithin 是可以的,但是当我输入“(”或“)”时,我会出现异常:

Uncaught SyntaxError: Invalid regular expression: /(/: Unterminated group

我查看了 typeahead“基础知识”并遇到了同样的错误:

https://twitter.github.io/typeahead.js/examples/#prefetch

当我首先尝试输入任何数字时也是如此 “1”“2” 等...

这是我的默认 substringMatcher,问题出在哪里:

var substringMatcher = function(strs) {
return function findMatches(q, cb) {
var matches, substringRegex;

// an array that will be populated with substring matches
matches = [];

// regex used to determine if a string contains the substring `q`
substrRegex = new RegExp(q, 'i');

// iterate through the pool of strings and for any string that
// contains the substring 'q', add it to the 'matches' array
$.each(strs, function(i, str) {
if (substrRegex.test(str)) {
matches.push(str);
}
});
cb(matches);
};
};

最佳答案

使用正则表达式会很痛苦,因为所有“特殊”字符,如 ( [ 等

您的代码似乎很简单,无论如何都不会使用 RegExp - indexOf 应该可以解决问题

var substringMatcher = function(strs) {
return function findMatches(q, cb) {
q = q.toLowerCase();
var matches = strs.filter(function(str) {
return str.toLowerCase().indexOf(q) >= 0;
});
cb(matches);
};
};

是的,ES2015+ 有 String#includes 方法,使用起来更有意义——但为什么不利用 ES2015+ 的所有好处

const substringMatcher = strs => (q, cb) => {
q = q.toLowerCase();
cb(strs.filter(str => str.toLowerCase().includes(q)));
};

或者效率较低(toLowerCase 调用的次数比需要的多,但代码更性感

const substringMatcher = strs => (q, cb) => cb(strs.filter(str => str.toLowerCase().includes(q.toLowerCase()))); 

关于javascript - Typeahead 无效的正则表达式 :/(/:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41142614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com