Javascript 删除字符串的最后一个实例时使用Regex或lastIndexOf

Javascript 删除字符串的最后一个实例时使用Regex或lastIndexOf,javascript,regex,replace,Javascript,Regex,Replace,我无法将答案应用于其他类似问题(尝试替换字符串的最后一次出现),因为语法有问题 我正在尝试替换字符串的最后一个匹配项。字符串的值存储在传递给.replace()方法的变量中,如下所示: var str += some additive strings; var del = a string that lives within str; // the value is dynamic str = str.replace(del$, ''); // this doesn't work to rem

我无法将答案应用于其他类似问题(尝试替换字符串的最后一次出现),因为语法有问题

我正在尝试替换字符串的最后一个匹配项。字符串的值存储在传递给
.replace()
方法的变量中,如下所示:

var str += some additive strings;
var del = a string that lives within str; // the value is dynamic

str = str.replace(del$, ''); // this doesn't work to remove the last occurrence of `del` in str
var str += 'some additive strings';
var re = new RegExp('a string that lives within str$');
str = str.replace(re, '');

据我所知,
$
参数查找正则表达式中最后出现的字符串;但是我不知道如何将它与传递给
.replace()
的变量一起使用。有什么建议吗?

您可以使用
lastIndexOf()
slice()

例如:

var str ="HI this is cool isn't it? cool";
var del='cool';// put whatever here
var index = test.lastIndexOf(del);
var length=del.length;
if(index!=-1)
var removeStr=test.substr(index,length);    
str.replace(removeStr,''); // HI this is cool isn't it? 
伙计,这只是一个答案。你需要根据需要使用它


更新的实时演示:

如果要将RegExp与$一起使用,请执行以下操作:

var str += some additive strings;
var del = a string that lives within str; // the value is dynamic

str = str.replace(del$, ''); // this doesn't work to remove the last occurrence of `del` in str
var str += 'some additive strings';
var re = new RegExp('a string that lives within str$');
str = str.replace(re, '');

正则表达式中的
$
表示字符串的结尾,因此,如果尝试删除
del
,则会将其删除。它还需要将正则表达式包装在括号中,因此它将是
替换(/del$/,“”)
这不就是只查找字符串
del
,而不是
变量del
中包含的字符串值吗?啊,是的,我的错误。在这种情况下,您可能需要
新的RegExp(del+'$')
,但仍然需要指出的是,regex中的
$
并没有执行您希望它执行的操作。如果我理解正确,如果你想删除最后一个“foo”,那么你会希望
“a foo b c foo d e”
变成
“a foo b c d e”
,对吗?是的。在您的示例中,字符串
foo
将以编程方式分配给变量
del
。比方说,用户制作了一个列表,并希望删除他们添加的最后一个内容。因此,必须删除的
del
的值会动态更改。谢谢,但这不是我想要的“我在找。我想在名为
del
的变量中指定要删除的字符串。根据用户的选择,字符串可能会有所不同。但是,它将始终出现在
str
中。因此,我想从
str
中删除
del
中包含的字符串的最后一个实例。不是单词
del
本身。@user1837608,查看演示。它不太正确,它假定文本位于字符串的最末端。请看我在问题下面的评论。@AmitJoki我现在明白了-它就像你的小提琴所暗示的那样工作。谢谢你的帮助@马特格里尔,这有什么区别?lastIndexOf()返回最后一个单词。继续查看给出的演示,键入您的测试用例
“a foo b c foo d e”
,并在单词框中键入
“foo”
,然后单击“完成”。感谢-为了澄清,要删除的字符串不是静态的。它根据一些用户选择动态分配给变量
del
。假设他们制作了一个重复某些字符串的列表,我希望他们能够删除添加的最后一个字符串。然后使用同样有效的re=new RegExp(del+'$')尝试上面的方法。我会玩弄你的答案和@AmitJoki的答案。