Javascript 如何替换字符串中最后出现的变量
如何用“foo”替换字符串中最后出现的变量(foo) 我试过: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
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之前的文本