Javascript str_replace在正则表达式中使用“加”和“减”字符

时间:2012-08-01 00:16:01

标签: javascript regex str-replace

我需要在字符串中替换所有实例中的两个不同的字符,所以我找到了这个答案

<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”代表全球 - 所有出现,“我”代表什么?

3 个答案:

答案 0 :(得分:2)

请勿使用eval,请使用RegExp对象:

var myvar = '+ 2 -';
alert(myvar.replace(/\+|\-/ig, '-'));

结果:- 2 -

i表示会忽略大小写。

答案 1 :(得分:0)

不要将RegExp放在引号内。那么你就不需要eval了。

答案 2 :(得分:0)

如前所述,尽量避免在正则表达式中使用字符串。虽然它看起来更干净(我个人喜欢看RegExp因为它更清晰),但在使用速记符号/ exp /开关时你会遇到更少的问题。

可以使用RegExp的三个(很少见的一个)开关:

  1. i:ignore-case
  2. g:全球(多场比赛)
  3. m:多行(有时需要换行的字符串)
  4. 注意:完全不要使用eval()。事实上,您可能不应该在代码中的任何位置使用eval - 我认为我在十年内没有在JS中使用它。几乎总是没有必要(有必要时会有少量使用它的库)。