更新:
アップデートには少し遅れますが、私はこの質問に出くわしただけで、以前の答えが満足のいくものではないことに気づきました。質問は単一の単語を置き換えることを含むため、単語の境界を使用することを誰も考えなかったのは驚くべきことです(\b
)
'a cat is not a caterpillar'.replace(/\bcat\b/gi,'dog');
//"a dog is not a caterpillar"
これは、ほとんどの場合、単語の一部の置き換えを回避する単純な正規表現です。ただし、ダッシュ-
は単語の境界と見なされます。したがって、この場合は条件文を使用して、次のような文字列の置換を回避できますcool-cat
。
'a cat is not a cool-cat'.replace(/\bcat\b/gi,'dog');//wrong
//"a dog is not a cool-dog" -- nips
'a cat is not a cool-cat'.replace(/(?:\b([^-]))cat(?:\b([^-]))/gi,'$1dog$2');
//"a dog is not a cool-cat"
基本的に、この質問はここの質問と同じです:Javascriptは「」を「」に置き換えます
@マイク、私がそこに与えた答えを確認してください... regexpは、subsrtingの複数のオカレンスを置換する唯一の方法ではありません。柔軟に考えて、分割して考えてください!
var newText = "the cat looks like a cat".split('cat').join('dog');
あるいは、単語の部分の置き換えを防ぐために-承認された回答でも可能です!この問題は、正規表現を使用して回避できます。正規表現は、やや複雑で、その結果、少し遅くなります。
var regText = "the cat looks like a cat".replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");
出力は受け入れられた回答と同じですが、この文字列で/ cat / g式を使用しています。
var oops = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/cat/g,'dog');
//returns "the dog looks like a dog, not a dogerpillar or cooldog" ??
確かに、これはおそらくあなたが望むものではありません。それでは何ですか?IMHO、条件付きで「猫」のみを置き換える正規表現。(つまり、単語の一部ではない)、次のように:
var caterpillar = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");
//return "the dog looks like a dog, not a caterpillar or coolcat"
私の推測では、これはあなたのニーズを満たしています。もちろん、それは完全なものではありませんが、開始するには十分なはずです。これらのページでさらに読むことをお勧めします。これは、特定のニーズを満たすためにこの表現を完成させるのに役立ちます。
http://www.javascriptkit.com/jsref/regexp.shtml
http://www.regular-expressions.info
最終追加:
この質問はまだ多くのビューを取得しているので.replace
、コールバック関数での使用例を追加すると思います。この場合、それが劇的に表現を簡素化し、正しい大文字小文字に置き換え、またはその両方を交換するように、さらに多くの柔軟性を提供cat
し、cats
一度に:
'Two cats are not 1 Cat! They\'re just cool-cats, you caterpillar'
.replace(/(^|.\b)(cat)(s?\b.|$)/gi,function(all,char1,cat,char2)
{
//check 1st, capitalize if required
var replacement = (cat.charAt(0) === 'C' ? 'D' : 'd') + 'og';
if (char1 === ' ' && char2 === 's')
{//replace plurals, too
cat = replacement + 's';
}
else
{//do not replace if dashes are matched
cat = char1 === '-' || char2 === '-' ? cat : replacement;
}
return char1 + cat + char2;//return replacement string
});
//returns:
//Two dogs are not 1 Dog! They're just cool-cats, you caterpillar
aba
inのすべての出現をに置き換えるababa
とca
、どの結果が予想されますか?caba
?abca
?cca
?