使用正则表达式替代条件语句的方法

12 浏览
0 Comments

使用正则表达式替代条件语句的方法

我想在这之前声明一下,我对正则表达式的了解很少。\n我试图让以下的正则表达式在Javascript/Typescript中工作:\n

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

\n这是用于确定字符串是否为有效GUID的正则表达式(以任何正确的形式存在;参见这里:https://stackoverflow.com/a/136591)。它适用于Python和PHP,但对于不支持条件语句的Javascript来说不适用。你会如何编写这个正则表达式以便Javascript可以使用它?\n你可以在这里测试它:\nhttps://regex101.com/r/rosi2k/1/tests

0
0 Comments

使用正则表达式时无法使用条件语句,所以唯一的选择是扩展现有的内容。从内部最深的组(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})$

虽然看起来很丑,但在您的测试中可以正常工作,如此处所示

它并不丑陋 - 它非常丑陋 🙂

0