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/

由于某种原因,两个相同(至少它们看起来像)的正则表达式模式返回不同的结果。谁能解释发生了什么?))

谢谢!

4

1 回答 1

2

不同之处在于,当您使用RegExp构造函数时,您传递的是一个字符串,而字符串文字中的反斜杠被解释为字符串转义。因此,要将反斜杠实际传递给正则表达式引擎,您必须确保字符串中的反斜杠被转义(通过在其前面放置反斜杠):

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

更新小提琴

于 2013-03-15T11:55:00.503 回答