我需要在字符串中替换所有实例中的两个不同的字符,所以我找到了这个答案
<script type="text/javascript">
var filter_out = eval("/1|3/ig");
var myvar = "1 2 3";
alert(myvar.replace(filter_out, "-"));
</script>
// - 2 -
它有效,但是这个没有:
<script type="text/javascript">
var filter_out = eval("/\+|\-/ig");
var myvar="+ 2 -";
alert(myvar.replace(filter_out, "-"));
</script>
//SyntaxError: invalid quantifier: /+|-/ig
我不喜欢我喜欢它,如果我使用
var filter_out = eval("/\\+|\\-/ig");
有人可以解释为什么它必须是双倍的? 我也知道“g”代表全球 - 所有出现,“我”代表什么?
答案 0 :(得分:2)
请勿使用eval,请使用RegExp
对象:
var myvar = '+ 2 -';
alert(myvar.replace(/\+|\-/ig, '-'));
结果:- 2 -
i
表示会忽略大小写。
答案 1 :(得分:0)
不要将RegExp
放在引号内。那么你就不需要eval
了。
答案 2 :(得分:0)
如前所述,尽量避免在正则表达式中使用字符串。虽然它看起来更干净(我个人喜欢看RegExp因为它更清晰),但在使用速记符号/ exp /开关时你会遇到更少的问题。
可以使用RegExp的三个(很少见的一个)开关:
注意:完全不要使用eval()。事实上,您可能不应该在代码中的任何位置使用eval - 我认为我在十年内没有在JS中使用它。几乎总是没有必要(有必要时会有少量使用它的库)。