Javascript str“替换使用”;加上;及;减;正则表达式中的字符
我需要在所有实例中替换字符串中的两个不同字符,所以我找到了这个答案Javascript str“替换使用”;加上;及;减;正则表达式中的字符,javascript,regex,str-replace,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 - 有人能解释一下为什么要加倍吗? 另外,我知道“g”代表全局-所有事件,“i”代表什么?不要使用e
<script type="text/javascript">
var filter_out = eval("/1|3/ig");
var myvar = "1 2 3";
alert(myvar.replace(filter_out, "-"));
</script>
// - 2 -
有人能解释一下为什么要加倍吗?
另外,我知道“g”代表全局-所有事件,“i”代表什么?不要使用eval,使用对象:
结果:-2-
i
表示它将忽略大小写。不要将您的RegExp
放在引号内。然后您就不需要对它求值了。如前所述,尽量避免在正则表达式中使用字符串。虽然它看起来更清晰(我个人喜欢查看RegExp,因为它更清晰),但使用速记符号/exp/switches时,您会遇到更少的问题
有三个(一个很少见到)开关可用于RegExp:
注意:对于此操作,根本不要使用eval()。事实上,您可能不应该在代码中的任何地方使用eval——我想我已经十年没有在JS中使用过它了。几乎总是不需要它(有些库在必要时会节约使用它)。这可能是相关的:TypeError:从另一个var过滤器构建一个RegExp时无法提供标志\u out=new RegExp(/\+\124;\-/,'ig');当我使用eval时,它看起来更干净,并且我可以在多个str中使用相同的filter_out变量。使用eval()有问题吗?编辑无所谓发现:stackoverflow.com/questions/9089532/why-does-eval-existy您可以简单地使用
filter_out=/1|3/ig
而不是filter_out=eval(“/1|3/ig”)
。这就是eval所做的。如果您想要一个用变量初始化的正则表达式,可以使用filter\u out=new RegExp(pattern,modifiers)
——在这种情况下,pattern是1 | 3
,modifiers是ig
。
<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");
var myvar = '+ 2 -';
alert(myvar.replace(/\+|\-/ig, '-'));