我在替换JS中的最后一个单词时遇到问题,我仍在搜索解决方案,但我无法得到它。
我有这段代码:
var string = $(element).html(); // "abc def abc xyz"
var word = "abc";
var newWord = "test";
var newV = string.replace(new RegExp(word,'m'), newWord);
我想在此字符串中替换最后一个单词“abc”,但现在我只能替换字符串中的所有或第一个匹配项。我怎样才能做到这一点?也许不是好方法?
答案 0 :(得分:15)
这是一个想法......
这是一个区分大小写的字符串搜索版本
var str = 'abc def abc xyz';
var word = 'abc';
var newWord = 'test';
// find the index of last time word was used
// please note lastIndexOf() is case sensitive
var n = str.lastIndexOf(word);
// slice the string in 2, one from the start to the lastIndexOf
// and then replace the word in the rest
str = str.slice(0, n) + str.slice(n).replace(word, newWord);
// result abc def test xyz
如果您需要不区分大小写的版本,则必须更改代码。让我知道,我可以为你改变它。 (PS。我这样做,所以我会很快发布)
更新:以下是不区分大小写的字符串搜索版
var str = 'abc def AbC xyz';
var word = 'abc';
var newWord = 'test';
// find the index of last time word was used
var n = str.toLowerCase().lastIndexOf(word.toLowerCase());
// slice the string in 2, one from the start to the lastIndexOf
// and then replace the word in the rest
var pat = new RegExp(word, 'i')
str = str.slice(0, n) + str.slice(n).replace(pat, newWord);
// result abc def test xyz
N.B。以上代码查找字符串。不是整个单词(即RegEx中的单词边界)。如果字符串必须是一个完整的单词,那么必须重新编写。
更新2:以下是一个不区分大小写的全字匹配版本,带有RegEx
var str = 'abc def AbC abcde xyz';
var word = 'abc';
var newWord = 'test';
var pat = new RegExp('(\\b' + word + '\\b)(?!.*\\b\\1\\b)', 'i');
str = str.replace(pat, newWord);
// result abc def test abcde xyz
祝你好运
:)
答案 1 :(得分:5)
// create array
var words = $(element).html().split(" ");
// find last word and replace it
words[words.lastIndexOf("abc")] = newWord
// put it back together
words = words.join(" ");
答案 2 :(得分:3)
您可以使用前瞻来获取句子中的最后一个单词:
var string = "abc def abc xyz";
var repl = string.replace(/\babc\b(?!.*?\babc\b)/, "test");
//=> "abc def test xyz"
答案 3 :(得分:3)
你想要两个:
abc
abc
所以你可以使用:
abc(?!.*abc)
(?!...)
是一个负向前瞻,如果前瞻中的内容匹配,它将失败整个正则表达式匹配。
另外要小心,因为它与abc
中的abcdaire
匹配:如果您只想要abc
作为单独的单词,则需要添加单词边界\b
:
\babc\b(?!.*\babc\b)
答案 4 :(得分:1)
答案 5 :(得分:1)
尝试
var string = $(element).html(); // "abc def abc xyz"
var word = "abc";
var newWord = "test";
var newV = string.replace(new RegExp(word+'$'), newWord);
答案 6 :(得分:0)
如果在没有全局标志的情况下使用,replace
方法仅替换目标字符串的第一个匹配项,您可以尝试使用以下这样的事实:
"abc def abc xyz abc jkl".split(' ').reverse().join(' ').replace('abc', 'test').split(' ').reverse().join(' ')