首页 > 正则表达式内用了.*?,如何继续惰性筛选里面的内容?

正则表达式内用了.*?,如何继续惰性筛选里面的内容?

例如在这个例子中,我想要提取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>

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


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

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

import re
import pprint

content_of_html = '''
<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>

ngRapProvider.script = 'http://rap.cxb123.com:9090/rap.plugin.js?projectId=6';  // 提取点一
<!-- build:css assets/css/build-common-index.css -->  // 如果这个也能提取更好了..
<link rel="stylesheet" href="assets/css/common.css">  // 提取点二
'''

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']
【热门文章】
【热门文章】