【问题标题】:Javascript regular expression to match an element in comma separated listJavascript正则表达式匹配逗号分隔列表中的元素
【发布时间】:2015-12-01 19:15:03
【问题描述】:

我有一个数组

var myArray = [  
   {  
      "field1":"Value 1",
      "IDs":""
   },
   {  
      "field1":"Value 2",
      "IDs":"123"
   },
   {  
      "field1":"Value 3",
      "IDs":"1233; 222"
   }
];

还有一个用于过滤记录的变量

var filterID = 123;

在数组中,ID 可以是空的,也可以是单个值或多个值,以分号分隔。结果应始终返回所有空白 ID 以及所有匹配的 ID。所以: filterID = 123 应该返回 'Value 1' 和 'Value 2' 但不是 'Value 3'。

显然,我无法检查每个 ID 是否包含带有字符串比较的 fitlerID,因为它也应该返回“值 3”。 “1233”包含“123”。

一种方法是拆分每个 ID 字符串并删除分号并与每个位进行比较。

但是,我想知道是否有更简单的方法来使用正则表达式进行检查?

即哪个正则表达式会返回数组中 id 为空白或以分号分隔的列表中的值为 123 的元素?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以对空字符串使用边界标记 \b 和 OR (|):

    /\b123\b|^$/
    

    这意味着123 将仅匹配整个单词(即,被[A-Za-z0-9_] 以外的字符包围),^$ 将捕获一个空字符串。 More info on the \b marker here.

    这是一个 demo of the regex 和一个 fiddle 以及一个示例函数。

    【讨论】:

    • 为什么要检查空字符串? \b123\b 应该做的工作
    • @MaxZoom 来自问题:“结果应始终返回所有空白 ID 以及所有匹配的 ID。”
    • 谢谢@EdCottrell。我将如何在 JS 中写出来?我试过str = "1233; 222"; var test = str.match(/\b123\b|^$/); console.log(test); 返回未定义。
    • @EmilyRose 好吧,在那个例子中,没有匹配项。 1233\b123\b 不匹配,并且它不为空,因此 test 未定义。我在答案中添加了一个小提琴,展示了如何实现这一点。
    • 非常感谢@EdCottrell。抱歉,我发布后才看到小提琴链接..这是一个超级快速的反应..你是天才!非常感谢。
    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    相关资源
    最近更新 更多