【发布时间】:2022-01-22 00:10:18
【问题描述】:
我正在尝试在 Datatables 中创建一个匹配属于所有选定组的用户的正则表达式搜索。
例子:
用户 A 属于 用户、其他、其他用户
用户 B 属于用户、其他
如果选择 用户 和 其他用户 作为过滤器,则只有用户 A 应显示在表格中。我遇到的问题是两个用户都在选择这些过滤器时显示。我认为正则表达式不匹配确切的字符串,并且在查看了多个其他答案之后,我似乎无法让它这样做。
我的解决方案:
if (!this.items.length) {
table.column(i).search('');
} else {
let regex = '^';
this.items.forEach(v => regex += `(?=.*\\b${v}\\b)`);
regex += '.*$'
table.column(i).search(regex, true, false, true)
}
结果:^(?=.*\bUsers\b)(?=.*\bOther Users\b).*$
但是,属于Users,Other的用户仍在返回。
【问题讨论】:
-
试试这个:
this.items.forEach(v => regex += "(?=.*(?<!\\S)${v}(?!\\S))"); -
它必须是
this.items.forEach(v => regex += "(?=.*(?<![^,])${v}(?![^,]))");或 - 如果不支持后视 -this.items.forEach(v => regex += "(?=.*(?:[^,]|^)${v}(?![^,]))"); -
@WiktorStribiżew 这行得通!您是否可以发布带有正则表达式解释的答案?多了解一点会很好,让我有机会标记为已回答
标签: javascript regex datatables