1
Mutoo 2014-01-17 21:28:11 +08:00 1
因为 \w 不包括 /
\w 相当于 [A-Za-z_] |
2
1423 2014-01-17 21:29:39 +08:00 1
|
3
zhujinliang 2014-01-17 21:38:32 +08:00 1
\w 不匹配 / 和 . 这两个符号吧
可以用 [^?] 来代替,意思是非 ? 的字符,或者用 [\w\./] 堆砌出需要的字符 要替换的话需要给后面的 css/main.css 分一个组吧 最终正则: /"\/static\/([^?]+)\?v=\${10}"/ 要替换的话,这样用: test.replace(/"\/static\/([^?]+)\?v=\${10}"/gi, '"/static/3333333333/$1"') |
4
switch 2014-01-17 21:48:04 +08:00 1
test.replace(/(\/static\/)(.*)(?=[?&]v=)(?:([?&])v=(\d+)(&?))/, function ($0, $1, $2, $3, $4, $5) {
return $1 + $4 + "/" + $2 + ("?" === $3 ? ("&" === $5 ? "?" : "") : $5); }) |
5
EchoFUN OP 谢谢大家,试了下。
这个正则应该够用了。 test.replace(/("\/static)(\/[^"\?]*)\?v=(\${10})"/ig, function($0, $1, $2, $3) { return $1 + '/3333333333' + $2 + '"'; }); @switch 写的好复杂哈,我消化消化。 |
6
mengzhuo 2014-01-17 22:50:36 +08:00 1
继续四处强调,xml用解析器,不要用正则
|
7
zhaoyafei 2014-01-17 22:58:11 +08:00
@zhujinliang 正则大牛,求有时间帮忙写个搞rss的
|
10
ETiV 2014-01-18 01:22:18 +08:00
|
11
alexrezit 2014-01-18 09:01:19 +08:00 via iPhone
楼主明显是个逗比.
|
12
leechan 2014-01-18 10:52:08 +08:00
楼主,一定需要这么复杂的正则么?我觉得如果只是要把上面的字符串变换成下面的形式的话就不需要这么复杂呀
str.replace(/\?v=\${10}/g, '').replace('static/', 'static/333333333/') 我觉得这样就可以了呀 |
14
zztczcx 2014-01-18 13:52:37 +08:00
s.replace(/(\/css.*)\?v\=(.*)(\".*)$/g,"/$2$1$3")
|
15
SoloCompany 2014-01-18 13:57:33 +08:00
为什么不改成
<link rel="stylesheet" href="/static/$$project.version$$/css/main.css”> 然后源代码里面直接就有 $$project.version$$ 这个目录存在,这样替换起来多简单 |
16
EchoFUN OP @SoloCompany 开发思路可能跟你说的不一样哈,不是所有的静态文件都要打版本号的,需要更新版本的静态在文件后边加上 ?v=$$$$$$$$$
|
18
mengzhuo 2014-01-19 22:55:13 +08:00
|
19
ianva 2014-01-20 22:15:58 +08:00
过滤脚本可以用 sed
/ *<link/{ s:\(/static/\)\([^\?][^\?]*/\)*\([a-z0-9_-][a-z0-9_-]*.css\)?v=\([0-9]*\)\":\1\4/\2\3: } |