替换第n个匹配的模式

时间:2014-09-15 10:10:44

标签: jquery regex replace

.match()硬编码的javascript方法允许您在匹配的模式之间进行选择,如下所示:.match()[number]仅当您的g中有regex修饰符时才更正
有没有办法为.replace()方法做同样的工作?
喜欢 : .replace(/pattern/g,'myText')[number]
循环找到或匹配的'结果并选择其中一个特定的改变?
或任何为此任务存在的jquery插件
为了更好地理解我的观念,这里有一个jsfiddle DEMO

2 个答案:

答案 0 :(得分:2)

这不是开箱即用的,你需要这样的功能:

String.prototype.replacen = function(re, replace, n) { 
    var p = 0; 
    return this.replace(re, function($0) { return p++ == n ? replace : $0 }) 
}

像这样工作

"abcdef".replacen(/[a-z]/g, "*", 3) // "abc*ef"

答案 1 :(得分:1)

解决这个问题的一种方法是自己跟踪比赛:

$('button').click(function () {
    // first, make sure we have a number (not a string):
    var v = parseInt($('input').val(), 10),
    // create a variable to keep track of 'which' match:
        matchNumber = 0;
    // use the anonymous function available to String.replace():
    result = $('p').text().replace(/12/g, function (a){
        // increment the matchNumber variable (because we're returning in the
        // next line):
        matchNumber++;
        // check to see if matchNumber - 1 (the 'pre-incremented' matchNumber) is
        // equal to the match we want. If it is, we return the specified string ('aa'),
        // otherwise we return the matched string (the variable `a`):
        return (matchNumber - 1) === v ? 'aa' : a;
    })
    $('div').text(result)
})

JS Fiddle demo

参考文献: