gpt4 book ai didi

javascript - 替换中的错误匹配

转载 作者:行者123 更新时间:2023-11-30 11:31:35 25 4
gpt4 key购买 nike

我想为不在 vendor 文件夹中的文件添加后缀 .min

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

为什么?

最佳答案

如果 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."));
}

关于javascript - 替换中的错误匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46056205/

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