2

すべてのインスタンスで文字列内の 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");

誰かがなぜそれが2倍でなければならないのか説明できます\? また、「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 で使用できるスイッチは 3 つあります (1 つは非常にめったに見られません)。

  1. i: 大文字と小文字を区別しない
  2. g: グローバル (複数一致)
  3. m: 複数行 (改行のある文字列に必要な場合があります)

注: これには eval() を使用しないでください。実際、おそらくコードのどこでも eval を使用すべきではありません。JS で eval を使用したのは 10 年ぶりだと思います。ほとんどの場合、それは必要ありません (必要に応じて控えめに使用するライブラリがあります)。

于 2012-08-01T00:26:29.087 に答える