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
// 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
3条答案
按热度按时间k75qkfdt1#
这将用
3
替换输入字符串中的第一个和最后一个单个数字input.replace(/^(.*?)\d(.*)\d(.*)$/, "$13$23$3");
可读性更强:
或者
input.replace(/^(.*?)\d(.*)\d(.*)$/, ["$1", "$2", "$3"].join(replacement));
如果你喜欢的话x8goxv8g2#
你可以使用这个基于负先行的正则表达式:
这里
\d+(?=\D*$)
表示匹配1个或多个数字,后面是所有非数字,直到行尾。5jvtdoz23#
这里有一个非常严格的方法来解决你的问题,你可能想让它适应你的需要,但它显示了一种方法,你可以完成任务。