2

我正在使用YUI3 库并使用过滤器来匹配和替换部分 URL。

因为过滤器不是很灵活,我只能提供一个正则表达式进行搜索,然后提供一个字符串来替换匹配项:

filter: {
    searchExp : "-min\\.js",
    replaceStr: "-debug.js"
}

就我而言,我有一个如下所示的 URL:

http://site.com/assets/js?yui-3.9.0/widget-base/assets/skins/sam/widget-base.css&yui-3.9.0/cssbutton/cssbutton-min.css

/assets/js如果有.css文件,我想匹配。如果参数包含 CSS 文件,那么它将始终只包含 CSS 文件。

到目前为止,我已经写了一个小正则表达式来检查最后是否存在.css

.*\.css$

但是,现在,如果我们有匹配,我想/assets/js作为匹配返回。这是正则表达式可行的吗?

就个人而言,我宁愿用一个简单的函数和一个简单的 if/else 来完成,但由于限制(我只能使用正则表达式),我需要找到一个正则表达式解决方案。

4

1 回答 1

0

这有点被破解了,但应该可以完成这项工作:

var t = new RegExp( "/assets/js(([^\\.]*\\.)*[^\\.]*\\.css)$" )

document.write( "http://site.com/assets/js?yui-3.9.0/widget-base/assets/skins/sam/widget-base.css&yui-3.9.0/cssbutton/cssbutton-min.css".replace( t, "/newthing/$1" ) );

本质上,它搜索/assets/js,然后是任何字符,然后是.css. 如果整个内容匹配,它将用新文本替换它,并在其后包含匹配的模式(从第一个括号开始)。之前的所有/assets内容都不包含在匹配中,因此不需要包含在内。

我想你的图书馆在replace内部使用,所以这些字符串应该可以工作。具体来说,

"/assets/js(([^\\.]*\\.)*[^\\.]*\\.css)$"
"/newthing/$1"

我不太确定你想对结果做什么,但这允许你更改文件夹并添加后缀(以及首先检查两个标记的存在)。要添加后缀,请将替换更改为:

"/assets/js$1-mysuffix"
于 2013-03-23T04:38:16.163 回答