用javascript

时间:2017-10-17 12:35:31

标签: javascript regex

之前曾问过这个问题,但我没有成功解决问题。 我有一个包含数字的字符串,例如

var stringWithNumbers = "bla_3_bla_14_bla_5";

我想用javascript替换数字的第n个出现(例如第2个)。我没有比

更快
var regex = new RegExp("([0-9]+)");
var replacement = "xy";
var changedString = stringWithNumbers.replace(regex, replacement);

这只会改变第一个数字。 建议使用像$1这样的反向引用,但这对我没有帮助。

结果应该是

"bla_3_bla_xy_bla_5" //changed 2nd occurence

2 个答案:

答案 0 :(得分:2)

您可以定义一个匹配所有次出现的正则表达式,并将回调方法作为replace方法的第二个参数传递,并在那里添加一些自定义逻辑:

var mystr = 'bla_3_bla_14_bla_5';

function replaceOccurrence(string, regex, n, replace) {
   var i = 0;
   return string.replace(regex, function(match) {
        i+=1;
        if(i===n) return replace;
        return match;
    });
}
console.log(
   replaceOccurrence(mystr, /\d+/g, 2, 'NUM')
)

此处,replaceOccurrence(mystr, /\d+/g, 2, 'NUM')需要mystr,搜索所有带有/\d+/g的数字序列,当涉及到第二次出现时,它将替换为NUM子字符串。

答案 1 :(得分:1)



var stringWithNumbers = "bla_3_bla_14_bla_5";

var n = 1;

var changedString = stringWithNumbers.replace(/[0-9]+/g,v => n++ == 2 ? "xy" : v);

console.log(changedString);