JS正则表达式在数据表中用连字符匹配整个单词

JS regex matching whole words with hyphen In dataTables

不确定最好是在此处发布还是在 JQ dataTables 论坛上发布。我这边试试。

对数据表中的列进行精确的正则表达式匹配,有两种情况,一种很好,但第二种不太好!

案例 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 行。

使用这个正则表达式

\b(Bob|Sue|Ann)\b

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

尝试使用 [\w-] 但似乎无法在竖线分隔的列表中使用它。 下面是 fiddle.

http://refiddle.com/1v1j

谢谢,

戴夫

您可以创建一个DIY边界。

使用捕获组或非捕获组,我们可以断言字符串的开头或 space 字符在前面,同时断言 space 字符或字符串的结尾在您的后面分组模式。

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

如果您愿意,也可以使用否定字符 class。在交替运算符的右边,我们没有匹配上面正则表达式中的一个space字符,而是匹配一个不是连字符或者单词字符的字符,这样更接近扩展单词边界的意图并对后面的小组做同样的事情。

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

你的情况可以换行

/\s*(Bob|Joe|Ann)\s*\n/g
^(?:Bob|Sue|Ann)$

您可以将锚点应用为 well.See 演示。

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