我想将后缀.min
添加到不在vendor
文件夹中的文件中。
let str = '/js/index.js';
let str2 = '/vendor/socket-io/library.js';
let myregex = new RegExp('^([^/vendor]*.*[^min]{3}\\.)([a-z]{1,2}s)', 'g');
let myreplace = '$1min.$2';
console.log(str.replace(myregex, myreplace));
console.log(str2.replace(myregex, myreplace));
退出
/js/index.min.js
/vendor/socket-io/library.min.js
由于某种原因,它与library.js
匹配,即使我排除了/vendor
:
^([^/vendor]*.* ...
在https://regex101.com/上进行测试时,所有内容都会检出,但javascript会另有考虑。
这是所需匹配的列表:
/vendor/bootstrap/css/bootstrap.min.css --> DO NOT MATCH
/vendor/font-awesome/font-awesome.min.css --> DO NOT MATCH
/vendor/jquery/jquery.min.js --> DO NOT MATCH
/vendor/bootstrap/js/bootstrap.min.js --> DO NOT MATCH
/vendor/socket-io/library.js --> DO NOT MATCH
/js/index.js --> MATCH
/css/style.css --> MATCH
/some/other/script.js --> MATCH
为什么?
答案 0 :(得分:2)
如果vendor
文件夹是顶级文件夹,则可以使用
^(?!\/vendor(?:\/|$))(?!.*\.min\.[^.]*$)(.*\.)
替换为$1min.
。请参阅regex demo。
<强>详情
^
- 字符串开头(?!\/vendor(?:\/|$))
- 左边不能有/vendor/
或/vendor
字符串结尾(?!.*\.min\.[^.]*$)
- 在任何0+字符之后,尽可能多地使用.min.
后跟除.
以外的任何字符,直至字符串结尾(.*\.)
- 第1组:除了换行符之外的任何0 +字符,尽可能多,直到最后.
和.
本身。替换字符串$1min.
会插入第1组值并在其后添加min.
。
JS演示:
var ss = ["/vendor/bootstrap/css/bootstrap.min.css", "/vendor/font-awesome/font-awesome.min.css", "/vendor/jquery/jquery.min.js", "/vendor/bootstrap/js/bootstrap.min.js", "/vendor/socket-io/library.js", "/js/index.min.js", "/js/index.js", "/css/style.css", "/some/other/script.js"];
var re = /^(?!\/vendor(?:\/|$))(?!.*\.min\.[^.]*$)(.*\.)/;
for (var s of ss) {
console.log(s, "=>", s.replace(re, "$1min."));
}
答案 1 :(得分:1)
我相信这是你正在寻找的正则表达式。
^(((?!\/vendor)(?!\.min\.).)*?)(\..+)$
此正则表达式的工作原理如下:
vendor
或.min.
.
后跟任何字符(但必须至少有1个)您可以将.
更改为您想要的任何内容。我将其保留为.
,因为扩展程序可以包含许多字符 使您的替换文字如下:$1.min$3
。
<强>输入强>
/vendor/bootstrap/css/bootstrap.min.css
/vendor/font-awesome/font-awesome.min.css
/vendor/jquery/jquery.min.js
/vendor/bootstrap/js/bootstrap.min.js
/vendor/socket-io/library.js
/js/index.js
/css/style.css
/some/other/script.js
<强>输出强>
/vendor/bootstrap/css/bootstrap.min.css
/vendor/font-awesome/font-awesome.min.css
/vendor/jquery/jquery.min.js
/vendor/bootstrap/js/bootstrap.min.js
/vendor/socket-io/library.js
/js/index.min.js
/css/style.min.css
/some/other/script.min.js