0

javascript RegExp の動作を理解する上で問題が発生しています。このような仕組みを理解するのを手伝ってください。

var str = "_prefix_123 blah blah _prefix_321 blah blah blah _prefix_100500";
var prefix = "_prefix_";
var exp = new RegExp (prefix+"\d*","gm");

str1 = str.replace(exp,"hello");
alert(str1);

str2 = str.replace(/_prefix_\d*/gm, "hello");
alert(str2);

ここでフィドルをチェックしてくださいhttp://jsfiddle.net/6PSdg/4/

何らかの理由で、2 つの同一の (少なくともそのように見える) 正規表現パターンが異なる結果を返します。誰が何が起こっているのか説明できますか? )))

ありがとう!

4

1 に答える 1

2

違いは、コンストラクターを使用すると、文字列RegExpを渡すことになり、文字列リテラルのバックスラッシュは文字エスケープとして解釈されることです。したがって、実際にバックスラッシュを正規表現エンジンに渡すには、文字列内のバックスラッシュがエスケープされていることを確認する必要があります(バックスラッシュを前に置くことによって)。

var exp = new RegExp (prefix+"\\d*","gm");
// Here ----------------------^

更新されたフィドル

于 2013-03-15T11:55:00.503 に答える