2017-07-05 4 views
1

単語を含む文(文字列)があります。私はある単語のすべての出現を別のものに置き換えたい。私はnewString = oldString.replace(/w1/gi, w2);を使用していますが、実際にどのくらいの単語を置き換えたかをユーザーに報告する必要があります。グローバル正規表現を使用する場合の置き換えの数を確認します。

に頼らずにそれを行うための簡単な方法があります:

  1. は、時間とカウントで一つの単語を交換するには。
  2. oldStringnewStringを単語単位で比較し、その差を集計しますか? (簡単なケースはoldString === newString => 0の置換えですが、それを超えて、私は両方を実行して比較する必要があります)。

ここで使用できるRegEx「トリッキー」はありますか、またはgフラグを使用しないでください。

+1

= 0コールバック 'VAR CNTを使用します。 var res = s.replace(/ str/g、function($ 0){cnt ++; return 'newstr';}); ' –

答えて

3

オプション1:コールバックを使用することによりreplaceコールバック

を使用して、カウンタをインクリメントして、コールバックで新しい単語を返すことができ、この文字列を1回だけトラバースしてカウントを実行できます。

var string = 'Hello, hello, hello, this is so awesome'; 
 
var count = 0; 
 
string = string.replace(/hello/gi, function() { 
 
    count++; 
 
    return 'hi'; 
 
}); 
 

 
console.log('New string:', string); 
 
console.log('Words replaced', count);

オプション2:splitjoin

を使用すると、また、splitメソッドを使用して、代わりに正規表現を使用して、ちょうど新しい文字列を作成するために、新しい単語と結合。この解決策では、正規表現を使用しないでカウントを達成することができます。

var string = 'Hello, hello, hello, this is so awesome'; 
 

 
string = string.split(/hello/i); 
 
var count = string.length - 1; 
 
string = string.join('Hi'); 
 

 
console.log('New string:', string); 
 
console.log('Words replaced', count);

+1

はい! replace関数のパラメータは私が必要としたものでした!ありがとう! –

2

使用している正規表現で文字列を分割し、長さを取得できます。

oldString.split(/w1/gi).length - 1 

の作業例:

var string = "The is the of the and the"; 
var newString = string.replace(/the/gi, "hello"); 

var wordsReplaced = string.split(/the/gi).length - 1; 

console.log("Words replaced: ", wordsReplaced); 
+1

これはありがとう - それはうまくいくでしょう!私はそこに元の文字列を再トラバースするより効率的な方法があると思っています。見つけられない場合は、あなたの答えが役立ちます。 –

関連する問題