0

配列に格納されている変数の先頭部分をパディングしています

disp_var_name = []; //contains elements: a, b, g, c, f, salary, d, e;

fText = "(b>0&& ( salary > 33.00 ) )"

for(var pp=0; pp<disp_var_name.length; pp++){
   fText = fText.replace(disp_var_name[pp], "_sc_"+disp_var_name[pp]);
}
alert(fText);

の値はあるfTextべきです(_sc_b>0&& ( _sc_salary > 33.00 ) )が、表示されます(_sc_b>0&& ( _sc_alary > 33.00 ) )

どうしたの?どのように正しくすればよいですか?

私は、c++ から js へのトランスレータのようなシステムに取り組んでいます。_sc_sc(ソースコード)の変数がシステムの変数から分離されるように、パディングしています。

4

1 に答える 1

0

for ループはdisp_var_name配列を順番に通過し、指定された各文字列の最初の出現を置き換えます。したがって、最初に「a」を見つけて「_sc_a」に置き換えると、次のようになります。

(b>0&& ( s_sc_alary > 33.00 ) )

次に、「b」を置き換えます。これにより、次のようになります。

(_sc_b>0&& ( s_sc_alary > 33.00 ) )

「g」を探しますが、最初の「c」の置換に進む前に見つかりません。

(_s_sc_c_b>0&& ( s_sc_alary > 33.00 ) )

"f" はなく、"salary" は以前の置換によりもう存在せず、"g" も存在しないため、結果は次のようになります。

(_s_sc_c_b>0&& ( s_sc_alary > 33.00 ) )

単語の境界を認識している正規表現を使用すると、次のように機能します。

fText = fText.replace(new RegExp("\\b"+disp_var_name[pp]+"\\b", "g"), "_sc_"+disp_var_name[pp]);

\ba\bこれにより、正規表現パターン、などに基づいて置き換えることができます。私が示したコード\bb\bの doubleは、文字列で提供される場合はエスケープする必要があるためです。\\\

(global) フラグが設定され.replace()た正規表現を渡した場合にのみ、グローバルな置換が行われることに注意してください。gなしで文字列または正規表現を渡すとg、最初に出現したものを置き換えるだけです。

于 2013-09-22T00:16:31.670 に答える