精确匹配正则表达式中的多个单词(数据表)
Exact match multiple words in regex (datatables)
我正在尝试在 Datatables 中创建正则表达式搜索,以匹配属于所有选定组的用户。
示例:
用户 A 属于 用户、其他、其他用户
用户 B 属于 用户、其他
如果选择 Users 和 Other 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}(?![^,]))");
(?:[^,]|^)
/ (?<![^,])
(等于 (?<=,|^)
)部分需要字符串位置的开头或搜索词前的逗号,(?![^,])
否定前瞻需要当前位置右侧的逗号或字符串结尾((?![^,])
等于 (?=,|$)
正向前看)。
我正在尝试在 Datatables 中创建正则表达式搜索,以匹配属于所有选定组的用户。
示例:
用户 A 属于 用户、其他、其他用户
用户 B 属于 用户、其他
如果选择 Users 和 Other 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}(?![^,]))");
(?:[^,]|^)
/ (?<![^,])
(等于 (?<=,|^)
)部分需要字符串位置的开头或搜索词前的逗号,(?![^,])
否定前瞻需要当前位置右侧的逗号或字符串结尾((?![^,])
等于 (?=,|$)
正向前看)。