我正试图在Datatables中创建一个正则表达式搜索,该搜索与属于所有选定组的用户相匹配。
示例:
用户A属于用户、其他和其它用户
用户B属于用户,其他
如果选择用户和 其他用户我的解决方案: 结果为: 但是,属于Users、Other的用户仍在返回中。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).*$
您可以在每个搜索词前后强制执行逗号或字符串开始/结束检查:
this.items.forEach(v => regex += "(?=.*(?:[^,]|^)${v}(?![^,]))");
或者,如果JavaScript环境支持lookbehinds:
this.items.forEach(v => regex += "(?=.*(?<![^,])${v}(?![^,]))");
(?:[^,]|^)
/(?<![^,])
(等于(?<=,|^)
(部分需要字符串位置的开始或在搜索词之前加一个逗号,而(?![^,])
负前瞻需要当前位置右侧加一个逗点或字符串结束((?![^,])
等于(?=,|$)
正前瞻(。