我有一个带有关键字的字符串,以逗号分隔。
现在我还有一个很好的 RegEx ,来过滤掉该字符串中与查询字符串匹配的所有关键字。
查看这个初始问题 - RegEx - Extract words that contains a substring, from a comma seperated string
以下示例正常;它有一个masterString和一个resultString。最后一个只包含至少包含“ car ”字样的关键字。
masterString = "typography,caret,car,align,shopping-cart,adjust,card";
resultString = masterString.match(/[^,]*car[^,]*/g);
console.log(resultString);
上述代码的结果;
"caret", "car", "shopping-cart", "card"
但是如何使用带有变量匹配词的RegEx(在此示例中,单词“ car ”为静态而非变量)。
我认为它必须使用RegExp做一些事情 - 但我无法弄明白......
答案 0 :(得分:1)
这是与正则表达式一起使用的一般解决方案:
var query = "anything";
// Escape the metacharacters that may be found in the query
// sadly, JS lacks a built-in regex escape function
query = query.replace(/[-\\()\[\]{}^$*+.?|]/g, '\\$&');
var regex = new RegExp("someRegexA" + query + "someRegexB", "g");
只要someRegexA
和someRegexB
与中间的文字形成有效的正则表达式,regex
变量将始终保持有效的正则表达式。
但是,在您的特定情况下,我只是这样做:
var query = "car";
var items = masterString.split(",");
query = query.toLowerCase();
for (var i = 0; i < items.length; ++i) {
if (items[i].toLowerCase().indexOf(query) >= 0) {
console.log(items[i]);
}
}
答案 1 :(得分:0)
这个怎么样?,你只需要用String替换\ \,它对我有用。它可以找到你的字符串是否有“car”,而不是其他类似的单词
var query = 'car';
var string = "car,bike,carrot,plane,card";
var strRegEx = '[^,]*'+query+'[,$]*';
string.match(strRegEx);
答案 2 :(得分:0)
由OP提供并从问题内部删除的答案
我想出了这个快速且可能非常肮脏的解决方案...
var query = 'car';
var string = "car,bike,carrot,plane,card";
var regex = new RegExp("[^,]*|QUERY|[^,]*".replace('|QUERY|',query),'ig');
string.match(regex);
此代码输出以下内容,但不确定是否做得好。
"car", "carrot", "card"
但是最终想出了另一个更简单的解决方案;
var query = "car";
var string = "car,bike,carrot,plane,card";
string.match(new RegExp("[^,]*"+query+"[^,]*",'ig'));
此代码输出以下字符串;
["car", "carrot", "card"]
我的app-search-engine现在可以完美运行:)