使正则表达式更好

Make regex betterer

本文关键字:更好 正则表达式      更新时间:2023-09-26

我需要一个包含两种可能性的表达式:

www.example.com
knowledge.example.com

还有许多其他可能的子域,所以它必须是根域或知识域。

我确实试了一下,这似乎有效。但是它看起来又长又难看,我想知道是否有一个更优雅的regex:

(www'.)?(knowledge'.)?(example'.com)

我想它没有那么长那么丑。我只是好奇我是否写对了或者是否有更短的写法

在我看来,这稍微不那么难看:

(www|knowledge)'.(example'.com)

有时我更喜欢这样:

(www|knowledge)[.](example[.]com)

完全等价于您的regexp:

((?:www|knowledge)'.)?(example'.com) 

额外答案

你可以在你的正则表达式模式中使用条件 with如。(?(?!www'.)knowledge|www)(?:'.example'.com)

工作演示@ regex101

编辑我

对于不支持条件的regex引擎,下面是用于模拟if-else流程的解决方案:

((?(?=positive-regex-statement)then|(?!negavite-regex-statement)then)
((?=www'.)www|(?!www'.)knowledge)(?:'.example'.com)

工作演示

正则表达式不是世界上最易读的东西。如果您想要更明确的含义,请尝试:

var domain = 'www.example.com';
var subdomain = domain.replace(/('w+)'.example'.com/, '$1');
var validSubdomains = ['www', 'knowledge'];
validSubdomains.indexOf(subdomain) != -1;