2015-06-03 59 views
0

在Javascript中,是否可以僅提取正則表達式的某些部分?例如,如果我有正則表達式刪除正則表達式語句的部分

/\.\w+\s\{|\.\-\w+\s\{/ 

是否有可能刪除找到的全停止和大括號而不破壞匹配?

讓我這樣說吧;

我在尋找通過我的樣式表,找到使用上述正則表達式語句中的所有類,因此類總是以一個句點開始,我需要找到類的第一個大括號。一旦找到它,我只需要沒有完整停止和大括號的類的名字來存儲在哈希表中。

那麼有沒有辦法從我的答案中刪除這些?我試過了.replace方法,但爲了工作,我需要實際的字符串,我不能使用我已經存儲的變量。我也會附上我的代碼以幫助你們理解更多。提前致謝!

if (rules[j].constructor === CSSMediaRule) { 
       mqrule = rules[j].cssText; 
       console.log(mqrule); 
       lines = (mqrule).split('\n'); 
       for (var c = 0; c < lines.length; c++) { 
        if (lines[c].match(/\.\w+\s\{|\.\-\w+\s\{/)) { 
         console.log("It works!"); 
         console.log(lines[c].match(/\.\w+\s\{|\.\-\w+\s\{/)); 
         newKey = lines[c].match(/\.\w+\s\{|\.\-\w+\s\{/); 

         //I'VE TRIED IT 2 WAYS BUT NEITHER WORK. 
         newKey = newKey.replace(".", ""); 
         newKey = newKey.replace(/[^a-zA-Z0-9\.]+/g); 
         //ANY SUGGESTIONS? 

         MQHash[newkey] = newValue; 
         console.log(MQHash); 
        } 
       } 
       mqls['mql' + j] = window.matchMedia(rules[j].media.mediaText); 
       mqls['mql' + j].addListener(mediaChange); 
       mediaChange(mqls['mql' + j]); 
      } 

回答

0

使用捕捉組:

/\.(\w+)\s\{|\.(\-\w+)\s\{/ 

對於每個(),您將獲得數組中的內容。

你應該使用這個,因爲它具有g全局標誌:

re = /\.(\w+)\s\{|\.(\-\w+)\s\{/; 
matches = re.exec(css); 

現在匹配是包含所有捕獲組的數組。 您感興趣的是索引1,因爲在索引0處始終是您匹配的整個文本。

+0

很酷!謝謝,它工作! – Rafill

0

不知道我完全理解你們的nedds,但如何:

/\.-?(\w+)\s\{/ 

你想要的結果是組1

+0

感謝您的輸入! (沒有諷刺的意圖) – Rafill