正则表达式内用了.*?,如何继续惰性筛选里面的内容?
高洛峰
高洛峰 2016-11-11 13:21:12
0
2
899

bVFkzX.png

例如在这个例子中,我想要提取js和css的文件路径,所以我匹配引号和引号中间的内容,然后里面用了 .*? 实现防止贪婪匹配,请问接下来怎么样才能正确的匹配呢?

另外实际的需求并不止于html标签,还可能需要在js or css文件里面提取引用url。 所以想到匹配引号和引号之间的内容,再筛选。

 <link rel="stylesheet" href="assets/css/bootstrap-theme.css">
    <link rel="stylesheet" href="assets/bower_components/angular-loading-bar/build/loading-bar.css">
    <link rel="stylesheet" href="assets/bower_components/font-awesome/css/font-awesome.css">
    <link rel="stylesheet" href="assets/css/ngdropover.css">

<script src="assets/bower_components/angularjs-ie8-build/dist/angular.js"></script>
<script src="assets/bower_components/jquery.browser/dist/jquery.browser.js"></script>
<script src="assets/bower_components/layer/layer.js"></script>


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(2)
学霸

对你说的这个问题,简单的办法类似/"[^"]*\.css"/
或者这样/".*?\.(?:css|js)"/

三叔

我用python测试了一个很简单的正则, 匹配时忽略大小写; 鉴于你还有其他模式的只要把格式串中的前后双引号去掉, 只匹配js或者css路径即可:

([^"'\s]*\.css|[^"'\s]+\.js)

import re
import pprint

content_of_html = '''









ngRapProvider.script = 'http://rap.cxb123.com:9090/rap.plugin.js?projectId=6';  // 提取点一
  // 如果这个也能提取更好了..
  // 提取点二
'''

pprint.pprint(re.findall('''([^"'\s]*\.css|[^"'\s]+\.js)''', content_of_html, re.I))


λ  ~/  python x.py 
['assets/css/bootstrap-theme.css',
 'assets/bower_components/angular-loading-bar/build/loading-bar.css',
 'assets/bower_components/font-awesome/css/font-awesome.css',
 'assets/css/ngdropover.css',
 'assets/bower_components/angularjs-ie8-build/dist/angular.js',
 'assets/bower_components/jquery.browser/dist/jquery.browser.js',
 'assets/bower_components/layer/layer.js',
 'http://rap.cxb123.com:9090/rap.plugin.js',
 'assets/css/build-common-index.css',
 'assets/css/common.css']


Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal