Javascript 如何替换字符串中最后出现的变量

Javascript 如何替换字符串中最后出现的变量,javascript,regex,Javascript,Regex,如何用“foo”替换字符串中最后出现的变量(foo) 我试过: var re = new RegExp(".*" + (foo))); var newText = currentText.replace(re, someThingElse); 如果针再次出现,则进行反向前瞻以使匹配失败 function replaceLast(haystack, needle, replacement) { // you may want to escape needle for th

如何用“foo”替换字符串中最后出现的变量(foo)

我试过:

    var re = new RegExp(".*" + (foo)));
    var newText = currentText.replace(re, someThingElse);

如果针再次出现,则进行反向前瞻以使匹配失败

function replaceLast(haystack, needle, replacement) {
    // you may want to escape needle for the RegExp
    var re = new RegExp(needle + '(?![\\s\\S]*?' + needle + ')');
    return haystack.replace(re, replacement);
}

replaceLast('foobarfoo', 'foo', 'baz'); // "foobarbaz"
replaceLast('foobarfoo  \n  foobarfoo', 'foo', 'baz'); // "foobarfoo  \n  foobarbaz"
replaceLast('foo    ', 'foo', 'baz'); // "baz    "
此方法的优点是,替换完全符合您的预期,即您可以正常使用
$1
$2
等,同样,如果您传入函数,参数也将符合您的预期

replaceLast('bar foobar baz', '(b)(a)(r)', '$3$2$1'); // "bar foorab baz"

如果针再次出现,则进行反向前瞻以使匹配失败

function replaceLast(haystack, needle, replacement) {
    // you may want to escape needle for the RegExp
    var re = new RegExp(needle + '(?![\\s\\S]*?' + needle + ')');
    return haystack.replace(re, replacement);
}

replaceLast('foobarfoo', 'foo', 'baz'); // "foobarbaz"
replaceLast('foobarfoo  \n  foobarfoo', 'foo', 'baz'); // "foobarfoo  \n  foobarbaz"
replaceLast('foo    ', 'foo', 'baz'); // "baz    "
此方法的优点是,替换完全符合您的预期,即您可以正常使用
$1
$2
等,同样,如果您传入函数,参数也将符合您的预期

replaceLast('bar foobar baz', '(b)(a)(r)', '$3$2$1'); // "bar foorab baz"

如果针再次出现,则进行反向前瞻以使匹配失败

function replaceLast(haystack, needle, replacement) {
    // you may want to escape needle for the RegExp
    var re = new RegExp(needle + '(?![\\s\\S]*?' + needle + ')');
    return haystack.replace(re, replacement);
}

replaceLast('foobarfoo', 'foo', 'baz'); // "foobarbaz"
replaceLast('foobarfoo  \n  foobarfoo', 'foo', 'baz'); // "foobarfoo  \n  foobarbaz"
replaceLast('foo    ', 'foo', 'baz'); // "baz    "
此方法的优点是,替换完全符合您的预期,即您可以正常使用
$1
$2
等,同样,如果您传入函数,参数也将符合您的预期

replaceLast('bar foobar baz', '(b)(a)(r)', '$3$2$1'); // "bar foorab baz"

如果针再次出现,则进行反向前瞻以使匹配失败

function replaceLast(haystack, needle, replacement) {
    // you may want to escape needle for the RegExp
    var re = new RegExp(needle + '(?![\\s\\S]*?' + needle + ')');
    return haystack.replace(re, replacement);
}

replaceLast('foobarfoo', 'foo', 'baz'); // "foobarbaz"
replaceLast('foobarfoo  \n  foobarfoo', 'foo', 'baz'); // "foobarfoo  \n  foobarbaz"
replaceLast('foo    ', 'foo', 'baz'); // "baz    "
此方法的优点是,替换完全符合您的预期,即您可以正常使用
$1
$2
等,同样,如果您传入函数,参数也将符合您的预期

replaceLast('bar foobar baz', '(b)(a)(r)', '$3$2$1'); // "bar foorab baz"

消极的前瞻会起作用,但也会起作用

newText = newText.replace(new RegExp("(.*)" + foo), "$1somethingElse");

消极的前瞻会起作用,但也会起作用

newText = newText.replace(new RegExp("(.*)" + foo), "$1somethingElse");

消极的前瞻会起作用,但也会起作用

newText = newText.replace(new RegExp("(.*)" + foo), "$1somethingElse");

消极的前瞻会起作用,但也会起作用

newText = newText.replace(new RegExp("(.*)" + foo), "$1somethingElse");


这里已经回答了一个问题:@AliSheikhpour eh。。这里已经回答了一个问题:@AliSheikhpour eh。。这里已经回答了一个问题:@AliSheikhpour eh。。这里已经回答了一个问题:@AliSheikhpour eh。。如果您不需要在替换中使用部分匹配,那么不使用贪婪的
*
将优于消极的前瞻。另外,
*
将不会在新行上匹配。这也会在我的原始字符串中添加回foo之后的文本吗?@SuperUberDuper在这种情况下,使用贪婪的
*
替换之前的文本,如果您不需要在替换中使用部分匹配,那么使用贪婪的
*
将比反向前瞻更好。另外,
*
将不会在新行上匹配。这也会在我的原始字符串中添加回foo之后的文本吗?@SuperUberDuper在这种情况下,使用贪婪的
*
替换之前的文本,如果您不需要在替换中使用部分匹配,那么使用贪婪的
*
将比反向前瞻更好。另外,
*
将不会在新行上匹配。这也会在我的原始字符串中添加回foo之后的文本吗?@SuperUberDuper在这种情况下,使用贪婪的
*
替换之前的文本,如果您不需要在替换中使用部分匹配,那么使用贪婪的
*
将比反向前瞻更好。另外,
*
在新行上不匹配。这也会在我的原始字符串中添加回foo之后的文本吗?@SuperUberDuper在本例中,它是在替换回foo之前的文本