我正在嘗試在 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 的用戶仍然被回傳。
uj5u.com熱心網友回復:
您可以在每個搜索詞之前和之后強制執行逗號或字串開始/結束檢查:
this.items.forEach(v => regex = "(?=.*(?:[^,]|^)${v}(?![^,]))");
或者,如果 JavaScript 環境支持lookbehinds:
this.items.forEach(v => regex = "(?=.*(?<![^,])${v}(?![^,]))");
將(?:[^,]|^)/ (?<![^,])(等于(?<=,|^))的一部分,需要開始的字串的位置或搜索詞前的逗號權和(?![^,])排除模式需要一個逗號或立即字串的結束至當前位置的右側((?![^,])等于(?=,|$)正向前查找)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389378.html
標籤:javascript 正则表达式 数据表
上一篇:整列上的Scala正則運算式
