Javascript Regex替换文件名jQuery的一部分

Javascript Regex替换文件名jQuery的一部分,javascript,jquery,Javascript,Jquery,我有一个字符串,它遵循相同的模式。我需要在这个字符串中动态设置文件名的第一位数字 例如: var newNumber = '123'; 改变这个 var str = '/folder1/folder2/folder3/567-7-P.jpg' 对此 var newStr = '/folder1/folder2/folder3/123-7-P.jpg' 我已经编写了一些简单的jQuery行来分解字符串,但不太确定如何用新值重新构建它。我更愿意使用rgex更灵活地完成这项工作,但我的正则表达式

我有一个字符串,它遵循相同的模式。我需要在这个字符串中动态设置文件名的第一位数字

例如:

var newNumber = '123';
改变这个

var str = '/folder1/folder2/folder3/567-7-P.jpg'
对此

var newStr = '/folder1/folder2/folder3/123-7-P.jpg'
我已经编写了一些简单的jQuery行来分解字符串,但不太确定如何用新值重新构建它。我更愿意使用rgex更灵活地完成这项工作,但我的正则表达式技能有限

现状

您可以将其用作函数

function replcaeNum(imgurl , newvalue){
    var result = imgurl.substr(imgurl.lastIndexOf('/') + 1);
    var sections = result.split('-');
    var replaceit = imgurl.replace(sections[0], newvalue);
    $('p').text(replaceit);
}
像那样使用它

// replcaeNum(imgurl ,newvalue);
replcaeNum('/folder1/folder2/folder3/567-7-P.jpg','123');

您可以将其用作函数

function replcaeNum(imgurl , newvalue){
    var result = imgurl.substr(imgurl.lastIndexOf('/') + 1);
    var sections = result.split('-');
    var replaceit = imgurl.replace(sections[0], newvalue);
    $('p').text(replaceit);
}
像那样使用它

// replcaeNum(imgurl ,newvalue);
replcaeNum('/folder1/folder2/folder3/567-7-P.jpg','123');

此正则表达式使用([^/]+$)来确保如果两者遵循相同的模式,则不匹配文件夹而不是文件:

var path = '/folder1/folder2/folder3/567-7-P.jpg';
var newPath = string.replace(/\/\d+([^\/]+)$/, "/123$1");

// result: '/folder1/folder2/folder3/123-7-P.jpg';
var path = '/folder1/folder2/987-abc/567-7-P.jpg';
如果存在具有相同模式的文件夹:

var path = '/folder1/folder2/folder3/567-7-P.jpg';
var newPath = string.replace(/\/\d+([^\/]+)$/, "/123$1");

// result: '/folder1/folder2/folder3/123-7-P.jpg';
var path = '/folder1/folder2/987-abc/567-7-P.jpg';
正则表达式将仅替换文件名:

// result: '/folder1/folder2/987-abc/123-7-P.jpg';
此正则表达式使用([^/]+$)来确保如果两者遵循相同的模式,则不匹配文件夹而不是文件:

var path = '/folder1/folder2/folder3/567-7-P.jpg';
var newPath = string.replace(/\/\d+([^\/]+)$/, "/123$1");

// result: '/folder1/folder2/folder3/123-7-P.jpg';
var path = '/folder1/folder2/987-abc/567-7-P.jpg';
如果存在具有相同模式的文件夹:

var path = '/folder1/folder2/folder3/567-7-P.jpg';
var newPath = string.replace(/\/\d+([^\/]+)$/, "/123$1");

// result: '/folder1/folder2/folder3/123-7-P.jpg';
var path = '/folder1/folder2/987-abc/567-7-P.jpg';
正则表达式将仅替换文件名:

// result: '/folder1/folder2/987-abc/123-7-P.jpg';

下面查找并替换第一次出现的斜杠,后跟一组数字,后跟一个带
/123-'
的破折号。如果需要为不同的替换字符串参数化斜杠,只需使用替换值动态构造替换字符串即可


下面查找并替换第一次出现的斜杠,后跟一组数字,后跟一个带
/123-'
的破折号。如果需要为不同的替换字符串参数化斜杠,只需使用替换值动态构造替换字符串即可

尝试使用
.split()
.splice()

var newNumber=“123”;
var str=“/folder1/folder2/folder3/567-7-P.jpg”;
//“.split”/”
var res=str.split(“/”);
//`.splice`res`内的最后一个索引,`.replace`第一次出现
//数字后跟“-”和`新编号`
res.splice(-1,1,res.slice(-1)[0]。替换(/\d+(?=-)/,newNumber));
var newStr=res.join(“/”);
文件编写(newStr)尝试使用
.split()
.splice()

var newNumber=“123”;
var str=“/folder1/folder2/folder3/567-7-P.jpg”;
//“.split”/”
var res=str.split(“/”);
//`.splice`res`内的最后一个索引,`.replace`第一次出现
//数字后跟“-”和`新编号`
res.splice(-1,1,res.slice(-1)[0]。替换(/\d+(?=-)/,newNumber));
var newStr=res.join(“/”);

文件编写(newStr)以您的示例为基础:

var string = '/folder1/folder2/folder3/567-7-P.jpg';

var path = string.substr(0, string.lastIndexOf('/') + 1);
var filename = string.substr(string.lastIndexOf('/') + 1);
var separator = filename.indexOf('-');
var suffix = filename.substr(separator, filename.length); // -7-P.jpg

$('p').text(path + '123' + suffix);

以您的例子为基础:

var string = '/folder1/folder2/folder3/567-7-P.jpg';

var path = string.substr(0, string.lastIndexOf('/') + 1);
var filename = string.substr(string.lastIndexOf('/') + 1);
var separator = filename.indexOf('-');
var suffix = filename.substr(separator, filename.length); // -7-P.jpg

$('p').text(path + '123' + suffix);


请将您的代码添加到小提琴中。文件名的模式有多稳定?前几个数字后面是否总是跟一个破折号?我们可以确定文件夹名称与相同的模式不匹配吗?@tvanfosson该模式保证与此匹配。唯一的区别可能是数字的长度不总是3。定位将始终是示例的定位。谢谢。请把你的代码放在提琴之外。文件名的模式有多稳定?前几个数字后面是否总是跟一个破折号?我们可以确定文件夹名称与相同的模式不匹配吗?@tvanfosson该模式保证与此匹配。唯一的区别可能是数字的长度不总是3。定位将始终是示例的定位。谢谢。请把你的代码放在提琴之外。文件名的模式有多稳定?前几个数字后面是否总是跟一个破折号?我们可以确定文件夹名称与相同的模式不匹配吗?@tvanfosson该模式保证与此匹配。唯一的区别可能是数字的长度不总是3。定位将始终是示例的定位。谢谢。您正在做一个很大的假设,即该值不会出现在字符串中的任何其他位置。如果其中一个文件夹名恰好包含相同的值怎么办?@tvanfosson 100%的编程都使用if语句。。因此,如果我敞开心扉,为不同的情况设想一切。。做作业比做作业好。。我已经用他的演示链接回答了他要求的案例。。正如你所知,编程是从问题中学到的。。让他试试,如果他有其他问题。。可能是的,也可能不是。。他会再问一次,直到他学会不再问。。抱歉,英语不好:)我不同意,是你对数据状态做出假设,并且没有考虑到替换字符串可能会产生重大意外后果的可能性。问题在于您所做的字符串替换类型的性质,它不能解释替换并将替换锚定到需要替换的字符串的特定部分。在你的回答中不考虑这一点,有点像教你的孩子如何使用热炉子,让他或她被烧焦。@tvanfosson我明白你的意思了。。我将在我的下一个答案中考虑这个问题。现在,我只希望在我的代码之后,OP不会被烧掉:):)您正在做一个很大的假设,即该值不会出现在字符串中的任何其他位置。如果其中一个文件夹名恰好包含相同的值怎么办?@tvanfosson 100%的编程都使用if语句。。因此,如果我敞开心扉,为不同的情况设想一切。。做作业比做作业好。。我已经用他的演示链接回答了他要求的案例。。正如你所知,编程是从问题中学到的。。让他试试,如果他有其他问题。。可能是的,也可能不是。。他会再问一次,直到他学会不再问。。抱歉,英语不好:)我不同意,是你对数据状态做出假设,并且没有考虑到替换字符串可能会产生重大意外后果的可能性。这是您不知道的字符串替换类型的性质