1
Weakdancer 2011-08-28 13:54:40 +08:00
python:
import re SO_=""" s = "url(a.jpg);color:red;url(b.gif)" """ print re.findall("url\(([^()]*)\)",SO_) |
2
orzzzzz OP @Weakdancer 谢谢...不过只要js版本的......传说中的非贪婪匹配总是不对.... :(....
|
3
badegg 2011-08-28 14:17:17 +08:00
可以添加一个元素然后利用浏览器的style对象去取不
|
4
Weakdancer 2011-08-28 14:17:26 +08:00
是的,我用js怎么都匹配不出来,很奇怪。
SO_= "url(a.jpg);color:red;url(b.gif)"; re_=/url\(([^\(\)]+)\)/; re_.exec(SO_); 竟然得到 ["url(a.jpg)","a.jpg"] 奇怪 |
5
Hyperion 2011-08-28 14:22:33 +08:00
= =! exec()一次返回一个... 多调用几次就出来了...
找不到了就会返回null... |
6
Hyperion 2011-08-28 14:25:24 +08:00
var s = "url(a.jpg);color:red;url(b.gif)";
var p = /url\s*\((.+?)\)\s*;?/gi; var test; while(test = p.exec(s)) { alert(test); } |
7
orzzzzz OP @Hyperion
--- 汗了. \s*\S+\s* --> .+......试过(\s*\S+\s*)+?,觉着应该是等价的呀. 可能还会有url("a.jpg"),url('b.gif')这样的形式的... 所以要求的子表达式中还不能是任意字符. 嗯,或者得到之后再做处理算了... 多谢. |
8
Hyperion 2011-08-28 15:21:45 +08:00
@orzzzzz 那也应该是 url\s*\((\s*\S+?\s*)\) 吧... 分组内部就已经匹配越界了.
"url(a.jpg);color:red;url(b.gif)" => a.jpg);color:red;url(b.gif 这一段都符合 (\s*\S+\s*)... |
9
orzzzzz OP |
10
Hyperion 2011-08-28 15:33:42 +08:00
@orzzzzz 其实啊, 是你()里写的就有了问题, 已经是非贪婪了... 在()外面加+?, 修饰的是这整个子表达式...
|
12
frittle 2011-08-28 17:50:46 +08:00
\S是问题所在,把p改成就OK了,都是同个站内的资源的话可以去掉\:
var p = /url\s*\((\s*[A-Za-z0-9\-\_\.\/\:]+\s*)\)\s*;?/gi; |