文章目錄

在公司的代码里见到下面两个正则,我认为可以进行优化,所以拿出来说说。

  • url(r'^api/(?P<model>(sku|hiring|news|enterprisenews)+)/?$')

这个正则的目的主要是匹配sku,hiring,news等模块,然而它也可以匹配skusku,skuhiring等等,这并不是我想要的。虽然最终不影响代码执行,但能够精确的就应该精确,因为计算机如此精确。所以把+号去掉是最好的写法。

  • var reg = /^.+\/(activitydocument\/.+)$/;

这里正则的目的是将http://.../activitydocument/...等链接替换成activitydocument/..., 因为+号是贪婪的,所以它会一直匹配到末尾,然后开始往回退,这样会影响性能。正确的做法是使用非贪婪。即改成/^.+?\/(activitydocument\/.+)$/;

在《正则指引》中,P305页有一个匹配HTML tag的例子,
</?[a-z][-a-z0-9_:.]*(?=[\s>])('[^']*'|"[^"]*"|[^'">])*>,但它不能匹配
等标签,以及不能匹配HTML注释,需要另外处理。

打赏作者

文章目錄