如何使用正则表达式和js匹配逗号分隔列表中的一个术语(单词或句子)?

时间:2017-03-30 18:16:28

标签: javascript regex

我有一个简单的列表,例如:

健康,保健,健康选择

我的搜索字词是" Health"。在搜索" Health"我不想匹配"医疗保健"和#34;健康选择"因为从技术上讲,这些是列表中的不同项目。

在阅读了Regex文档后,我发现我应该使用lookbehind来检查前面的文本。但据我所知,JS正则表达式中没有这些选项。

总之,我需要匹配组中的特定值,其中组是逗号之前/之后的术语。

1 个答案:

答案 0 :(得分:0)

如果您确实需要使用正则表达式,以下方法将起作用:

var str = "Cat Health, Health, Health Care, Health Options",
    reg = /(?:[^,], )*(Health)(?:, [^,])*/;

alert(str.match(reg)[1]);
// -> Health

正则表达式说明:

  1. 非逗号内容后跟逗号和空格 - 重复0-n次。
  2. “健康”
  3. 逗号,空格,非逗号内容 - 重复0-n次
  4. 请注意,Javascript Regex中没有后瞻,请参阅:
    Positive look behind in JavaScript regular expression

    按照评论中的建议以编程方式执行此操作(假设列表项始终用逗号分隔,然后用空格分隔):

    var str = "Cat Health, Health, Health Care, Health Options"
    var list = str.split(/, /);
    var a = list.indexOf("Health");
    // a = -1 if not found, otherwise contains the index of "Health" in the list