JS正则表达式将整个单词与连字符匹配在dataTables中

时间:2015-01-01 16:04:14

标签: javascript regex jquery-datatables

不确定这是最好的发布在这里还是在JQ dataTables论坛上。我会在这里试试。

在dataTable中的列上进行精确的正则表达式匹配,并且有两个案例,其中一个很好但第二个不太好!

案例1 列数据

Joe    
Bob    
Sue   
Bobby    
Joey

那么我想要所有拥有Joe,Bob,Sue而不是Bobby和Joey的行。

我的正则表达式看起来像这样;

 \b(Joe|Bob|Sue)\b

它很棒。我看到三个名字的过滤行而不是Bobby和Joey。 我使用管道分隔列表,因为我还将过滤器列表存储在URL参数中,因此过滤后的版本可以进行书签标记。

现在我的问题是: 案例2 列数据

Joe    
Bob    
Sue   
Bobby    
Joey
Ann
Jo-Ann

在这种情况下,我想要Bob Sue和Ann rows。

使用此正则表达式

\b(Bob|Sue|Ann)\b

获取我想要的行但也得到Jo-Ann Rows,我假设因为 - 被视为单词之间的边界。

使用[\ w-]进行游戏,但似乎无法在管道分隔列表中使用它。 下面是小提琴。

http://refiddle.com/1v1j

谢谢,

戴夫

3 个答案:

答案 0 :(得分:3)

您可以创建 DIY 边界。

使用捕获或非捕获组,我们可以断言字符串的开头或空格字符在断言空格字符或字符串的末尾跟随您的分组模式之前。

(?:^| )(Bob|Sue|Ann)(?: |$)

如果您愿意,也可以使用否定的字符类。在交替运算符的右侧,我们不是匹配上述正则表达式中的空格字符,而是匹配不是连字符或单词字符的字符,这更接近于扩展单词边界的意图并执行相同操作对于随后的小组。

(?:^|[^-\w])(Bob|Sue|Ann)(?:[^-\w]|$)

答案 1 :(得分:0)

可以在您的案例中应用换行

/\s*(Bob|Joe|Ann)\s*\n/g

答案 2 :(得分:0)

^(?:Bob|Sue|Ann)$

您也可以应用锚点。参见演示。

https://www.regex101.com/r/fG5pZ8/3