几个正则讨论
文章目錄
在公司的代码里见到下面两个正则,我认为可以进行优化,所以拿出来说说。
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注释,需要另外处理。