【问题标题】:Alternative for Conditionals with RegEx使用 RegEx 替代条件
【发布时间】:2018-08-07 14:07:43
【问题描述】:

我想以我对RegEx知之甚少作为开头。

我正在尝试让以下 RegEx 与 Javascript/Typescript 一起使用:

/^({)?(?(1)|(\()?)[0-9A-F]{8}(-)?([0-9A-F]{4}(?(3)-)){3}[0-9A-F]{12}(?(1)}|(?(2)\)))$/i

这是用于确定字符串是否为有效 GUID 的正则表达式(采用任何正确的形式;如下所示:https://stackoverflow.com/a/136591)。它适用于 Python 和 PHP,但不适用于 Javascript,因为它不支持条件。您将如何以 Javascript 可以使用的方式编写此代码?

你可以在这里测试它: https://regex101.com/r/rosi2k/1/tests

【问题讨论】:

  • 看起来很吓人,哈哈。
  • @RyanWilson 不开玩笑。
  • @Jan 因为它是一个 Angular 应用程序。我无法使用该问题中的内容,因为如果您删除 - 并将它们放在不正确的位置,它将不起作用。在我上面发布的测试中使用该正则表达式,它并不适用于所有测试。

标签: javascript regex typescript


【解决方案1】:

您不能使用条件,因此唯一的选择是扩展已经存在的内容。从最里面的组 (3) 开始,您可以将以下部分转换为它的扩展对应部分:

(-)?([0-9A-F]{4}(?(3)-)){3}
(?:-([\dA-F]{4}-){3}|[\dA-F]{12})

现在唯一剩下的就是扩展围绕正则表达式其余部分的第 1 组和第 2 组:

^(?:{[\dA-F]{8}(?:-([\dA-F]{4}-){3}|[\dA-F]{12})[0-9A-F]{12}}|\([\dA-F]{8}(?:-([\dA-F]{4}-){3}|[\dA-F]{12})[0-9A-F]{12}\)|[\dA-F]{8}(?:-([\dA-F]{4}-){3}|[\dA-F]{12})[0-9A-F]{12})$

它很丑,但它适用于您的测试as shown here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
相关资源
最近更新 更多