2013-03-15 36 views
0

我遇到了JavaScript RegExp行爲的一些理解問題。請幫助我瞭解這些東西的工作原理。請解釋RegExp javascript行爲

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/

出於某種原因,兩個相同的小提琴(他們似乎至少等)正則表達式模式返回不同的結果。任何人都可以解釋發生了什麼? ))

Thanx!

回答

2

不同的是,當你使用RegExp構造函數,你傳遞一個字符串,並在字符串中的反斜槓被解釋爲字符串逃逸。所以,實際上傳遞一個反斜槓正則表達式引擎,你必須確保在字符串中的反斜槓轉義(通過把一個反斜槓在它的前面):

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

Updated Fiddle

+0

你救了我的週末!^_^ – LoomyBear 2013-03-15 12:00:10

+0

@LoomyBear:很高興幫助! :-) – 2013-03-15 12:01:09