RegEx - 从逗号分隔的字符串中提取包含子字符串的单词

时间:2014-08-02 12:01:57

标签: javascript regex string

使用 Javascript / jQuery ,我有以下字符串;

MasterString = "typography,caret,car,card,align,shopping-cart,adjust,allineate";

最佳 RegEx 是什么,用于提取包含所有字词的所有字词。 " 汽车",所以我剩下以下字符串;

ResultString = "caret,car,card,shopping-cart";

是否也可以只提取第一个单词,其中包含" 汽车"?

ResultString = "caret";

我正在编写一个简单的搜索例程,它将查询( car )与逗号分隔列表相匹配,我想将第一个结果显示为查询的结果。


更新

我尝试了下面答案中提到的简单RegEx;

[^,]*car[^,]*

效果很好,请看这个(测试 - )图片 - http://i.imgur.com/RXwkrrF.png?1

查询是" 汽车"所有图标都标有至少包含" 汽车"在搜索结果中显示。

唯一的问题是搜索字符串" 汽车"总是不同的(取决于搜索表单中的用户输入)。那么如何在上面的RegEx中输入变量匹配字符串?

像这样;

[^,]*%QUERY-FROM-SEARCHFIELD%[^,]*

2 个答案:

答案 0 :(得分:1)

你可以在没有正则表达式的情况下这样做:

  1. 将字符串拆分为数组:

    var tempArray = MasterString.split( ',' );
    
  2. 过滤数组中包含单词car的值:

    tempArray = tempArray.filter(function (x) {
        if (x.contains('car')) return x;
    });
    
  3. 加入生成的数组:

    ResultString = tempArray.join( ',' );
    

  4. MasterString = "typography,caret,car,card,align,shopping-cart,adjust,allineate";
    var tempArray = MasterString.split( ',' );
    tempArray = tempArray.filter(function (x) {
        if (x.contains('car')) return x;
    });
    ResultString = tempArray.join( ',' );
    

    要获得第一个结果,只需访问tempArray的第0个元素:

    var x = tempArray[0];
    

答案 1 :(得分:0)

您可以尝试以下正则表达式仅匹配字符串caret,car,card,shopping-cart

[^,]*car[^,]*

DEMO

> var masterString = "typography,caret,car,card,align,shopping-cart,adjust,allineate";
undefined
> masterString.match(/[^,]*car[^,]*/g);
[ 'caret',
  'car',
  'card',
  'shopping-cart' ]

要匹配包含字符串car的第一个单词,您需要从模式中删除全局标记。

> masterString.match(/[^,]*car[^,]*/);
[ 'caret',
  index: 11,
  input: 'typography,caret,car,card,align,shopping-cart,adjust,allineate' ]

现在将数组转换为由逗号分隔的字符串并将其存储到变量中。

> var resultString = masterString.match(/[^,]*car[^,]*/g).join(",");
undefined
> resultString
'caret,car,card,shopping-cart'