2

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

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

4

3 回答 3

3

不要使用 eval,使用RegExp对象:

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

结果:- 2 -

i意味着它将忽略大小写。

于 2012-08-01T00:19:27.560 回答
0

不要把你的RegExp内引号。那你就不需要了eval

于 2012-08-01T00:24:24.940 回答
0

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

您可以在 RegExp 中使用三个(一个非常少见的)开关:

  1. i: 忽略大小写
  2. g:全局(多个匹配)
  3. m:多行(有时对于带有换行符的字符串是必需的)

注意:不要为此使用 eval()。事实上,您可能不应该在代码中的任何地方使用 eval —— 我想我已经有十年没有在 JS 中使用过它了。几乎总是不需要它(有些库在必要时会谨慎使用它)。

于 2012-08-01T00:26:29.087 回答