2014-09-03 85 views
0

我想從這樣的字符串解除性質不同正則表達式使用一個簡單的正則表達式字面

var value = valueAccessor.match(/function(?=[^}]*value\s?:\s?(\w+))/im)[1] 

我有不同的屬性我想舉一個列表,例如標籤ID,所以我遍歷他們使用RegExp動態設置我的正則表達式。

// Iterate through id, label, value 
for(var prop in obj) { 
var propRegex = new RegExp('/function(?=[^}]*' + prop + '\\s?:\\s?(\\w+))/im'); 
var propValue = valueAccessor.match(propRegex)[1]; 
} 

雖然propRegex源是相同的第一個例子,它返回undefined的結構,因此意味着我不能提取的相對值。

任何人都可以解釋兩者之間的區別,我會出錯哪裏嗎?

+2

'新的正則表達式(圖案,標誌);' – epascarello 2014-09-03 15:06:04

+2

的'/'是** **分隔符正則表達式的文字,就像'「'都的分隔符字符串,它們告訴解析器模式開始和結束的地方,它們不是數值(模式)本身的一部分,如果你不使用正則表達式,不要在模式周圍放置'/' – 2014-09-03 15:09:37

回答

3

這是

new RegExp(pattern, flags); 

,所以你需要刪除/和移動im

var propRegex = new RegExp('function(?=[^}]*' + prop + '\\s?:\\s?(\\w+))', 'im'); 

參考:MDN RegExp constructor

+0

將接受在第二個答案中,我並沒有真正在JavaScript中使用正則表達式,因此我覺得我有點困惑,因爲我沒有在原始'string.match'中指定任何標誌(即使有重載) – LukeHennerley 2014-09-03 15:10:19

+0

費利克斯·克林的評論剛剛開始......我現在明白了。 n Stack讓我接受我的意願,爲此歡呼 - 讓我抓住了一段時間! :P – LukeHennerley 2014-09-03 15:12:02

+0

即使它正常工作,正則表達式也是不必要的複雜。不需要前瞻:''function [^}] *'+ prop +'\\ s::\\ s?(\\ w +)''。也許他打算使用一個非捕獲組,而不是'(?:)'。 – 2014-09-03 15:18:13

0

看來,下方的正則表達式的格式不正確。

嘗試這樣做:

for(var prop in obj) { 
var propRegex = new RegExp("function(?=[^}]*" + prop + "\\s?:\\s?(\\w+))", "im"); 
var propValue = valueAccessor.match(propRegex)[1]; 
} 
+1

這樣會在字符串內查找'+ prop +',這當然不是什麼OP想要。 – 2014-09-03 15:10:26

+0

我忘了更改RegExp中的單引號。我改變了第一個和最後一個(因爲我更喜歡使用雙引號),但忘記改變其他人。 – Mindastic 2014-09-03 15:12:32

+0

這就是爲什麼正確解釋問題和解決方案總是很好的原因;)否則很難說出你改變了什麼來解決問題,以及可能只是一個錯字。 – 2014-09-03 15:14:14

相關問題