gpt4 book ai didi

javascript - 正则表达式如果子字符串存在则匹配字符串的另一部分

转载 作者:行者123 更新时间:2023-11-30 06:34:17 24 4
gpt4 key购买 nike

我正在使用 YUI3 library我正在使用 filter匹配和替换 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

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

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

.*\.css$

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

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

最佳答案

这有点乱七八糟,但应该可以完成工作:

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"

关于javascript - 正则表达式如果子字符串存在则匹配字符串的另一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15583257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com