0

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

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

将导致所有“导航”更改为海军 - 太棒了!

但这也将导致“海军”更改为海军。(即,它将海军中的“导航”替换为海军,并在“导航”被替换后留下“y”)

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

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

但这并不理想,因为某些项目可能在它们之后有 / 并且没有空格。

4

3 回答 3

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

或者:

    $(this).text(text.replace(/\sNav\s/g, "Navy")); 

或者:

    $(this).text(text.replace(/\bNav\b/g, "Navy")); 

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

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

$('.ProductDetails a').text(function(index, old) {
    return old.replace(/\sNav\s/g, "Navy");
});​
于 2012-05-15T23:35:19.327 回答
1

您可以像这样使用正则表达式替换:

$(this).text(text.replace(/\snav[\s/]/g,"navy");

方法:

replace [whitespace]nav[whitespace or "/"] to "navy"
于 2012-05-15T23:36:16.953 回答
1

你想使用一个知道单词边界的正则表达式:

text.replace(/\bnav\b/, 'Navy')
于 2012-05-15T23:37:02.587 回答