【问题标题】:Find correct regex找到正确的正则表达式
【发布时间】:2020-09-21 00:27:03
【问题描述】:

我正在尝试为这种情况找到正确的正则表达式:

  • ???-1.1.0-???

我需要版本之间的前缀和后缀,?可以是一切(字母、数字或什么都没有)

我有什么:

static check(version: string) {
    return /-(\d+)\.(\d+)\.(\d+)-$/.test(version);
} 

感谢您的帮助:)

【问题讨论】:

  • 首先,你的意思是你需要后缀,即 1.1.0 吗? “而不是 toto” 通过为您的示例添加真实的预期值来增加清晰度。
  • 不是这样的:???-1.1.0
  • 所以你需要一起忽略“toto”部分吗?您对前两个示例的预期输出是什么?你忽略了什么?
  • 是的,这只是一个例子,我只需要帮助在正则表达式中使用版本的前缀和后缀:)
  • 您需要通过minimal, reproducible example 提供实际输出和预期输出来澄清您的问题。

标签: javascript regex typescript


【解决方案1】:

"???-1-" 不会仍然是“前缀”,无法通过简单的正则表达式来判断,您需要捕获数字、点、数字等之间的所有内容......直到遇到另一个破折号。

故障

共有三组:前缀(可选)、版本和后缀(也可选)。

  1. ([a-z][a-z-]*\-)?
    • 以一个字母开头,后跟零个或多个字母和破折号,以破折号结尾
  2. ([0-9][0-9.]*)
    • 以数字开头,后跟零个或多个数字和点文字
  3. (\-[a-z][a-z-]*)?
    • 以破折号开头,后跟一个字母和零个或多个字母和破折号

单元测试

const VERSION_PATTERN = /([a-z][a-z-]*\-)?([0-9][0-9.]*)(\-[a-z][a-z-]*)?/i;

const isVersionValid = (version) =>  VERSION_PATTERN.test(version);

const testCases = [
  { version: 'toto-1-1.0-toto', valid : true  },
  { version: 'toto-1-1.0'     , valid : true  },
  { version: '1-1.0-toto'     , valid : true  },
  { version: '1-1.0'          , valid : true  },
  { version: 'toto'           , valid : false },
];

mocha.setup("bdd");
chai.should();

testCases.forEach(testCase => {  
  describe("Validity test", function() {
      it(`"${testCase.version}" is ${testCase.valid ? 'valid' : 'invalid'}`, () => {
          isVersionValid(testCase.version).should.equal(testCase.valid);
      });
  });
});

mocha.run();
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.2.5/mocha.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.2.5/mocha.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.2.0/chai.js"></script>

<div id="mocha"></div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-09
    • 2014-12-10
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多