1

可能重复:
如何替换 javascript 中最后出现的单词?

我有一个字符串,例如:" 345 ,456,678, 345 , 345 ,678343,232"

我需要从字符串中删除最后出现的345(在此示例中位于中间,但可以不在字符串中的位置)。考虑过使用 RegEx,但找不到正确的模式,也无法在任何地方找到解决方案。

有人能帮忙吗?

ps 我知道我可以为此使用 JavaScript 字符串操作,但我认为这就是 RegEx 的用途......

谢谢...埃雷兹

4

2 回答 2

3

你可以这样做...

var str = "345,456,678,345,345,678,343,232",
    last_idx = str.lastIndexOf(345);

str = str.replace(/345/g, function(s, i) { return i === last_idx ? '' : s; });

正如@Crayon Violent指出的那样,RegExp如果集成变量,则应从构造函数构建正则表达式。

function removeLast(str, v) {
    var re = new RegExp(v, 'g'),
        last_idx = str.lastIndexOf(v);

    return str.replace(re, function(s, i) { return i === last_idx ? '' : s; });
}

如果要删除的值是作为字符串的正则表达式,并且它应该用于lastIndexOf,那么您可以.exec()改用它。

function removeLast(str, v) {
    var re = new RegExp(v, 'g'),
        match,
        last_idx;

    while (match = re.exec(str))
        last_idx = re.lastIndex - match.length

    return str.replace(re, function(s, i) { return i === last_idx ? '' : s; });
}

但是,如果您要使用.exec(),您总是可以在循环中构建新字符串。您只需要确保在循环完成后排除最后一个匹配项。

于 2012-06-05T15:28:18.537 回答
2

从如何替换javascript中最后出现的单词的最佳答案修改?:

function removeLast(str, target) {
    return str.replace(new RegExp("(.*)"+target), "$1");
}

这使用了贪婪.*——它将尝试尽可能多地抓取字符串,包括所需目标的实例,直到它到达目标的最后一个实例。因此,整个正则表达式匹配整个字符串,直到并包括最后一个 bigt 实例,然后将其替换为匹配(.*)的,即目标字符串之前的所有内容。

于 2012-06-05T15:31:16.660 回答