我正在尝试修复regex替换语句的问题。这是代码:
var str1 = "bbb/mobile-main.min.js";
var str2 = "ttt/main.min.js";
var str21 = "mobile-main.min.js";
var str22 = "main.min.js";
var re = new RegExp("main\.min\.js" + "(\\?[0-9a-z]+)?", "g");
var ans1 = str1.replace(re, '$1main.78765.min.js');
var ans2 = str2.replace(re, '$1main.78765.min.js');
var ans21 = str21.replace(re, '$1main.78765.min.js');
var ans22 = str22.replace(re, '$1main.78765.min.js');
console.log("ans1: "+ ans1);
console.log("ans2: "+ ans2);
console.log("ans21: "+ ans21);
console.log("ans22: "+ ans22);
结果是:
"ans1: bbb/mobile-main.78765.min.js"
"ans2: ttt/main.78765.min.js"
"ans21: mobile-main.78765.min.js"
"ans22: main.78765.min.js"
我想要的结果只是要匹配的第二个字符串(str2):
"bbb/mobile-main.min.js"
"ttt/main.78765.min.js"
"mobile-main.min.js"
"main.78765.min.js"
这是link到jsbin
我找不到符合我目标的正则表达式语句。 谢谢!
修改:修复了Jsbin链接。
另一个限制:我不会总是在文件名前面有一些东西。这应该有类似的结果(只有第二个匹配):
mobile-main.min.js
mail.min.js
EDIT2 编辑了所有条件的代码+ JSBin
答案 0 :(得分:1)
您可以使用此正则表达式:
var re = new RegExp("(^|/)main\.min\.js" + "(\\?[0-9a-z]+)?", "g");
var ans1 = str1.replace(re, '$1main.78765.min.js'); // bbb/mobile-main.min.js
var ans2 = str2.replace(re, '$1main.78765.min.js'); // ttt/main.78765.min.js
(^|/)
确保模式main\.min\.js
仅在其开始时或/
之前被替换。