[英]Regular expression matches unwanted strings
我正在嘗試使用正則表達式替換語句解決問題。 這是代碼:
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"
這是jsbin的鏈接
我找不到符合我目標的正則表達式語句。謝謝!
編輯 :Jsbin鏈接已修復。
另一個限制:我不會總是在文件名的前面加上一些東西。 這應該有相似的結果(只有秒應該匹配):
mobile-main.min.js
mail.min.js
在所有條件下Edit2編輯代碼+ JSBin
您可以使用此正則表達式:
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
開頭或之前替換/
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.