使用数组内容查找文本以进行替换

时间:2013-09-22 00:03:13

标签: javascript

我填充存储在数组

中的变量的开头部分
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(源代码)中的变量与系统的变量隔离。

1 个答案:

答案 0 :(得分: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”,“薪水”因为之前的替换而不再存在,并且没有“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等进行替换。我所显示的代码中的双\\是因为\需要如果以字符串形式提供,则转义。

请注意,.replace()只有在传递带有g(全局)标志集的正则表达式时才会进行全局替换;如果你传递一个没有g的字符串或正则表达式,它只是替换第一次出现。