正则表达式匹配不需要的字

时间:2015-01-23 19:45:50

标签: javascript regex

我正在尝试修复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

1 个答案:

答案 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

JSBin Demo

(^|/)确保模式main\.min\.js仅在其开始时或/之前被替换。