使用正则表达式替代条件语句的方法
使用正则表达式替代条件语句的方法
我想在这之前声明一下,我对正则表达式
的了解很少。\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
使用正则表达式时无法使用条件语句,所以唯一的选择是扩展现有的内容。从内部最深的组(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})$
虽然看起来很丑,但在您的测试中可以正常工作,如此处所示。
它并不丑陋 - 它非常丑陋 🙂