regex JS正则表达式在dataTables中匹配带连字符的全词

t5zmwmid  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(98)

不知道这是最好的张贴在这里或JQ数据表论坛。我在这里试试。
对dataTable中的列进行精确的正则表达式匹配,有两种情况,一种工作得很好,但第二种不太好!

用例1列数据

Joe    
Bob    
Sue   
Bobby    
Joey

所以我想要所有有乔,鲍勃,苏而不是鲍比和乔伊的行。
我的正则表达式看起来像这样;

\b(Joe|Bob|Sue)\b

而且效果很好。我看到三个名字的过滤行,而不是鲍比和乔伊。我使用管道分隔列表,因为我还将过滤器列表存储在URL参数中,以便过滤后的版本可以标记为书签。
我的问题案例:用例2列数据

Joe    
Bob    
Sue   
Bobby    
Joey
Ann
Jo-Ann

在这种情况下,我想鲍勃苏和安罗斯。
使用此正则表达式

\b(Bob|Sue|Ann)\b

获取我想要的行,但也获取Jo-Ann行,我假设是因为-被视为单词之间的边界。
尝试使用[\w-],但似乎无法让它在管道分隔列表上工作。下面是小提琴。
http://refiddle.co/1v1j

uelo1irk

uelo1irk1#

您可以创建一个DIY边界。
使用捕获或非捕获组,我们可以Assert字符串的开头或空格字符在前面,同时Assert空格字符或字符串的结尾遵循您的分组模式。

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

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

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

zfycwa2u2#

换行可应用于您的情况

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

xa9qqrwz3#

^(?:Bob|Sue|Ann)$

你也可以应用锚点。看演示。
https://www.regex101.com/r/fG5pZ8/3

相关问题