使用RegEx的条件的替代方案

时间:2018-02-27 19:58:53

标签: javascript regex typescript

我想在此基础上加上我对RegEx的了解甚少。

我试图让以下RegEx与Javascript / Typescript一起使用:

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

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

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

1 个答案:

答案 0 :(得分:2)

您无法使用条件,因此唯一的选择是扩展已存在的条件。从最里面的组(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