[英]Regular expressions
我在這里創建了一個搜索系統= https://www.secondhandboards.com/productsresultsbrands.php
使用Algolia Instantsearchjs V2
左側有一個過濾器,用戶可以根據產品尺寸過濾產品。 但是,我無法以合適的順序顯示尺寸。 我們有各種不同的尺寸組合。 有些用英尺和英寸表示,例如5'6“;有些用文本值表示,例如S,M,L,XL;而其他值只是數字。數字項很好,但是涉及英尺和英寸時,它顯示或示例:
5'10“ 5'1” 5'2“ 5'3”
因此5'10“在5'1”值之前。
我現有的功能是:
sortBy: function(a, b) {
return parseInt(a.name, 10) - parseInt(b.name, 10);
},
但並未真正達到預期的結果。
有沒有人知道我如何實現正則表達式以獲取正確排序的大小列表的任何指針或示例。 我以前從未使用過正則表達式。
任何幫助將非常感激。 謝謝。
正則表達式用於解析文本,而不用於比較值。 它們是這項工作完全錯誤的任務……除非您要使用它們來處理值並查看它們是否確實是英尺和英寸的度量。
function isFeetAndInches(input) {
// returns an array [feet,inches] if the input is such, false otherwise
var match = input.match(/^(\d+)'(\d+)"$/);
if( match) return [match[1],match[2]];
return false;
}
現在您可以比較:
var afi = isFeetAndInches(a),
bfi = isFeetAndInches(b);
if( afi && bfi) {
return afi[0] - bfi[0] || afi[1] - bfi[1];
}
// else try some other comparison because they aren't both feet-and-inches.
我假設您想使用這些度量對數組進行排序。
然后,可以在排序的回調函數中使用split。
var str = '6\\'1" 5\\'10" 5\\'3" 5\\'2" 5\\'1" 4\\'2"'; console.log(str); let arr = str.match(/\\b\\d+'\\d+"/g); arr.sort(function(a,b) {const x = a.split(/\\D+/), y = b.split(/\\D+/); return x[0] - y[0] || x[1] - y[1]}); console.log(arr);
最簡單的解決方案似乎是用'
分割並使用數字localeCompare
進行比較:
var sizes = ["6'10\\"", "4'10\\"", "5'2\\"", "5'10\\"", "5'1\\"", "5'3\\""]; var sortedSizes = sizes .slice(0) .sort(function(a, b) { var A = a.split("'"), B = b.split("'"); return A[0].localeCompare(B[0], [], { numeric: true }) || A[1].localeCompare(B[1], [], { numeric: true }); }); console.log(sizes); console.log(sortedSizes);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.