使正则表达式更好
Make regex betterer
我需要一个包含两种可能性的表达式:
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;
相关文章:
- 用于分析带引号的字符串的更简单的正则表达式
- 比这更好的正则表达式方法
- 比正则表达式更快地匹配字符串之间的字符
- 进行此正则表达式替换的好方法
- 我的验证码有什么问题?(正则表达式很好)
- MongoDB 正则表达式找到两个单词,它们之间正好有 n 个或更少的单词
- 正则表达式替换的比我想要的更多
- 如何构造一个只接受16个或更少字段的正则表达式
- 为什么这个正则表达式不起作用,哪个符号更符合标准
- 在Node.js中实现更好的正则表达式的方法
- 通过分解成更小的部分来解释javascript正则表达式
- 除了字符e, n, p,有没有更简洁的正则表达式来匹配a-z ?
- 如何使用更简单的正则表达式检查,chrome扩展使用的url
- 使正则表达式更好
- 是否有更好和/或更快的方法来执行这个正则表达式
- 实现“多重传递”的优雅方式在正则表达式中?或者让我的正则表达式更聪明
- 声明正则表达式的更好方法
- 想要对我的RegEx(正则表达式)进行更多分类
- 有没有办法获取哪个组是正则表达式中匹配的组.更喜欢Javascript,但Python也可以
- V8会自动缓存编译好的正则表达式吗?