我有一个这样的字符串:var input = "/first_part/5/another_part/3/last_part"
我想替换最后一次出现的整数(3
在我的字符串中),然后是第一次出现(5
)。
我试过这个:input .replace(/\d+/, 3);
替换所有出现的事件。但是如何只针对最后一个/第一个。
提前致谢。
答案 0 :(得分:4)
这将用3
input.replace(/^(.*?)\d(.*)\d(.*)$/, "$13$23$3");
这是一个重新定义此链接的链接:http://refiddle.com/1am9
更具可读性:
var replacement = '3';
input.replace(/^(.*?)\d(.*)\d(.*)$/, "$1" + replacement + "$2" + replacement + "$3");
或input.replace(/^(.*?)\d(.*)\d(.*)$/, ["$1", "$2", "$3"].join(replacement));
如果那是你的事。
答案 1 :(得分:0)
你可以使用这种基于正则表达式的负前瞻:
var input = "/first_part/5/another_part/3/last_part";
// replace first number
var r = input.replace(/\d+/, '9').replace(/\d+(?=\D*$)/, '7');
//=> /first_part/9/another_part/7/last_part
此处\d+(?=\D*$)
表示匹配1个或多个数字,后跟所有非数字,直到行尾。
答案 2 :(得分:0)
对于您的问题,这是一种非常严格的方法,您可能希望根据您的需求进行调整,但它显示了一种可以完成任务的方法。
// input string
var string = "/first_part/5/another_part/3/last_part";
//match all the parts of the string
var m = string.match(/^(\D+)(\d+)+(\D+)(\d+)(.+)/);
// ["/first_part/5/another_part/3/last_part", "/first_part/", "5", "/another_part/", "3", "/last_part"]
// single out your numbers
var n1 = parseInt(m[2], 10);
var n2 = parseInt(m[4], 10);
// do any operations you want on them
n1 *= 2;
n2 *= 2;
// put the string back together
var output = m[1] + n1 + m[3] + n2 + m[5];
// /first_part/10/another_part/6/last_part