0

例: 色付きのアイテムをリストするページがあります。Nav として記載されているものもあれば、Navy として記載されているものもあります。

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

すべての 'Nav' がネイビーに変更されます - すばらしい!

ただし、「Navy」が「Navyy」に変更されることにもなります。(つまり、navy の 'nav' を navy に置き換え、'nav' が置き換えられた後に '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 に答える