老实说,您的函数可能会“做一件事”,但正如您自己所说的那样
我可以开始将正则表达式分解为多个功能,
这意味着您的reg ex代码可以完成很多事情。而且我想它可能会分解成较小的,可单独测试的单元。但是,如果这是一个好主意,则不容易回答(特别是在没有看到实际代码的情况下)。正确的答案可能不是“是”或“否”,而是“还没有,但是下次您必须在该reg exp中进行一些更改”。
但由于我实际上是在切换语言,因此我觉得这样实际上会失去可读性
这就是核心点-您有一段用reg ex语言编写的代码。这种语言本身并没有提供任何好的抽象方法(我不认为“命名捕获组”可以替代功能)。因此,“以正则表达式语言”重构实际上是不可能的,并且将较小的reg exp与宿主语言交织实际上并不能提高可读性(至少,您有这种感觉,但您对此表示怀疑,否则您将不会提出这个问题) 。所以这是我的建议
向其他高级开发人员展示您的代码(也许在/codereview//上),以确保其他人以您的方式考虑可读性。对其他人可能找不到像您这样可读的100行reg exp持开放态度。有时,仅用第二双眼睛就可以克服“不易分解成小块”的概念。
观察实际的可扩展性-当新的需求到达并且您必须实施和测试它们时,您闪亮的reg exp看起来仍然很好吗?只要您的reg exp有效,我就不会碰它,但是每当需要更改某些内容时,我都会重新考虑将所有内容都放入这个大块中是否真的是一个好主意-并且(认真地!)重新考虑是否拆分为较小的部分将不是更好的选择。
观察可维护性-您能很好地有效调试当前形式的reg exp吗?尤其是在您必须更改某些内容之后,现在您的测试告诉您某些错误之后,您是否拥有一个reg exp调试器来帮助您找到根本原因?如果调试困难,那也将是重新考虑设计的机会。