RegEx - 带有变量关键字的JavaScript .match()

时间:2014-08-02 13:54:52

标签: javascript regex csv

我有一个带有关键字的字符串,以逗号分隔。

现在我还有一个很好的 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做一些事情 - 但我无法弄明白......

3 个答案:

答案 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");

只要someRegexAsomeRegexB与中间的文字形成有效的正则表达式,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现在可以完美运行:)