精确匹配regex(数据表)中的多个单词



我正试图在Datatables中创建一个正则表达式搜索,该搜索与属于所有选定组的用户相匹配。

示例:

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

用户B属于用户其他

如果选择用户

其他用户我的解决方案:

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)
}

结果为:^(?=.*bUsersb)(?=.*bOther Usersb).*$

但是,属于UsersOther的用户仍在返回中。

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

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

或者,如果JavaScript环境支持lookbehinds:

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

(?:[^,]|^)/(?<![^,])(等于(?<=,|^)(部分需要字符串位置的开始或在搜索词之前加一个逗号,而(?![^,])负前瞻需要当前位置右侧加一个逗点或字符串结束((?![^,])等于(?=,|$)正前瞻(。

最新更新