如果在单词中找到,则停止.replace()替换相同的字符串

Jam*_*mes 0 javascript regex jquery replace

例如:有一个页面列出了一些带颜色的项目.有些被列为Nav,有些被列为海军.

$('.ProductDetails a').each(function() {
    var text = $(this).text();
    $(this).text(text.replace("Nav", "Navy")); 
});
Run Code Online (Sandbox Code Playgroud)

将导致所有'导航'改为海军 - 太棒了!

但它也将导致'海军'改为海军.(即它将海军中的'nav'替换为海军,并在'nav'被替换后留下'y')

有没有办法使用上面的技术来阻止这种情况,或者我必须更改脚本以解决这些双重问题.

我目前的解决方案是在Nav之后添加一个空格 $(this).text(text.replace("Nav ", "Navy"));

但这并不理想,因为有些物品可能有一个/后面没有空间.

gdo*_*ica 6

$('.ProductDetails a').each(function() {
    var text = $(this).text();
    $(this).text(text.replace(/^Nav$/g, "Navy")); 
});
Run Code Online (Sandbox Code Playgroud)

要么:

    $(this).text(text.replace(/\sNav\s/g, "Navy")); 
Run Code Online (Sandbox Code Playgroud)

要么:

    $(this).text(text.replace(/\bNav\b/g, "Navy")); 
Run Code Online (Sandbox Code Playgroud)

还有很多其他方法......

请注意,您可以使用此text重载:

$('.ProductDetails a').text(function(index, old) {
    return old.replace(/\sNav\s/g, "Navy");
});?
Run Code Online (Sandbox Code Playgroud)