正则表达式

时间:2018-07-04 12:00:21

标签: javascript regex

我在这里创建了一个搜索系统= 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);
},

但未真正达到预期的结果。

有人知道我如何实现正则表达式以获取正确排序的大小列表的任何指针或示例。我以前从未使用过正则表达式。

任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:2)

正则表达式用于解析文本,而不用于比较值。对于这项工作,它们是完全错误的任务……除非您要使用它们来处理值并查看它们是否确实是英尺和英寸的度量。

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.

答案 1 :(得分:0)

我假设您想使用这些度量对数组进行排序。
然后可以在排序的回调函数中使用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);

答案 2 :(得分:0)

最简单的解决方案似乎是将srun -n1 -N1 --exclusive bash hostname.sh & 除以并使用数字'进行比较:

localeCompare