我有一个字符串,例如:" 345 ,456,678, 345 , 345 ,678343,232"
我需要从字符串中删除最后出现的345(在此示例中位于中间,但可以不在字符串中的位置)。考虑过使用 RegEx,但找不到正确的模式,也无法在任何地方找到解决方案。
有人能帮忙吗?
ps 我知道我可以为此使用 JavaScript 字符串操作,但我认为这就是 RegEx 的用途......
谢谢...埃雷兹
我有一个字符串,例如:" 345 ,456,678, 345 , 345 ,678343,232"
我需要从字符串中删除最后出现的345(在此示例中位于中间,但可以不在字符串中的位置)。考虑过使用 RegEx,但找不到正确的模式,也无法在任何地方找到解决方案。
有人能帮忙吗?
ps 我知道我可以为此使用 JavaScript 字符串操作,但我认为这就是 RegEx 的用途......
谢谢...埃雷兹
你可以这样做...
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()
,您总是可以在循环中构建新字符串。您只需要确保在循环完成后排除最后一个匹配项。
从如何替换javascript中最后出现的单词的最佳答案修改?:
function removeLast(str, target) {
return str.replace(new RegExp("(.*)"+target), "$1");
}
这使用了贪婪.*
——它将尝试尽可能多地抓取字符串,包括所需目标的实例,直到它到达目标的最后一个实例。因此,整个正则表达式匹配整个字符串,直到并包括最后一个 bigt 实例,然后将其替换为匹配(.*)
的,即目标字符串之前的所有内容。