首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于范围和增量检查的RegEx

用于范围和增量检查的RegEx
EN

Stack Overflow用户
提问于 2019-03-08 11:52:12
回答 2查看 194关注 0票数 0

是否有任何RegEx可以测试此场景。

  1. 以逗号分隔的字符串,其中左数应小于右数。正确示例: 1,2,3,4,10,20不正确的示例: 3,2,1,4,1,20
  2. 字符串可以有像1-25这样的分隔符,其中左应该比右小,并且字符串在这个范围之间不应该有数字。

正确示例: 1-50,51,52,55-60 1,2,3-10,12,20不正确的例子: 1-50,49,20,60 2,3,1-10

我应该为此编写单独的函数吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-08 12:39:18

这是一个非正则表达式。您可以在split上对数字进行,,然后根据它们的数值进行sort。如果值是范围,则使用最大值。然后join排序数组。检查结果字符串是否与原始字符串相同。

代码语言:javascript
运行
复制
const getMaxValue = str => str.includes("-") ? +str.split("-")[1] : +str;

const checkInOrder = str => str === str.split(",")
                                  .sort((a,b) => getMaxValue(a) - getMaxValue(b))
                                  .join(",")

console.log(checkInOrder("1,2,3,4,10,20"))
console.log(checkInOrder("3,2,1,4,1,20"))
console.log(checkInOrder("1-50,51,52,55-60"))
console.log(checkInOrder("1,2,3-10,12,20"))
console.log(checkInOrder("1,2,3-10,12,20"))
console.log(checkInOrder("1-50,49,20,60,2,3,1-10,11"))

票数 2
EN

Stack Overflow用户

发布于 2019-03-08 12:58:13

在这个任务中使用正则表达式是非常困难的。我认为更好的方法是使用JavaScript:

代码语言:javascript
运行
复制
const isValid = arr => {
  const items = [];
  const ranges = [];
  const inRange = (range, x) => x >= range.start && x <= range.end;
  
  for (let i = 0; i < arr.length; ++i) {
    const x = +arr[i];
    const rangeParts = /(\d+)\s*-\s*(\d+)/.exec(arr[i]);
    if (rangeParts) {
      const range = { start: +rangeParts[1], end: +rangeParts[2] };
 
      const validRange = range.start < range.end &&
        ranges.every(r => range.start > r.end || range.end < r.start);
      if (!validRange) return false;
      
      const itemsInRange = items.some(item => inRange(range, item));
      if (itemsInRange) return false;
      
      ranges.push(range);
    }
    const inRanges = ranges.some(r => inRange(r, x));
    if (inRanges) return false;

    if (i > 0 && items[items.length-1] >= x) return false;
    
    items.push(x);
  }
  return true;
};

console.log(isValid(['1', '2', '3', '4']));
console.log(isValid(['1', '2', '3', '4', '5-7']));
console.log(isValid(['1', '2', '3', '4', '5-7', '1-3']));
console.log(isValid(['1', '2', '3', '4', '5-7', '7-8']));
console.log(isValid(['1', '2', '3', '4', '5-7', '8-10']));
console.log(isValid(['1', '20', '3', '4', '5-7', '8-10']));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55062694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档