精确匹配正则表达式中的多个单词(数据表)

Exact match multiple words in regex (datatables)

我正在尝试在 Datatables 中创建正则表达式搜索,以匹配属于所有选定组的用户。

示例:

用户 A 属于 用户其他其他用户

用户 B 属于 用户其他

如果选择 UsersOther Users 作为过滤器,只有用户 A 应该显示在 table 中。我遇到的问题是两个用户都在选择这些过滤器时显示。我不认为正则表达式匹配精确的字符串,在查看了多个其他答案后,我似乎无法做到这一点。

我的解决方案:

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的用户仍然被返回。

您可以在每个搜索词前后强制执行逗号或 start/end 字符串检查:

this.items.forEach(v => regex += "(?=.*(?:[^,]|^)${v}(?![^,]))");

或者,如果 JavaScript 环境支持回顾:

this.items.forEach(v => regex += "(?=.*(?<![^,])${v}(?![^,]))");

(?:[^,]|^) / (?<![^,])(等于 (?<=,|^))部分需要字符串位置的开头或搜索词前的逗号,(?![^,]) 否定前瞻需要当前位置右侧的逗号或字符串结尾((?![^,]) 等于 (?=,|$) 正向前看)。