2014-05-07 66 views
-1

餘米試圖匹配模式中找到一個JS正則表達式模式正則表達式的JS,除了關鍵字

Any_Function() //match : Any_Function(
butnotthis() //I don't want to match butnotthis(

我有這樣的模式:/([a-zA-Z_]+\()/ig

,並希望類似 /(not:butnotthis)|([a-zA-Z_]+\()/ig(不要嘗試這一點)

演示在這裏: http://regexr.com/38qag

是否possib le不匹配關鍵字?

+1

是什麼讓「butnotthis」是你不想要的東西? –

+0

運行兩個正則表達式,在第二個文件中除去你不想要的東西... –

回答

2

我解釋你的問題的方式,你想能夠創建一個被忽略的函數的黑名單。據我所知,你不能用正則表達式來做到這一點;不過,你可以用一些JavaScript來完成。

我創建的jsfiddle:http://jsfiddle.net/DQN79/

var str = "Any_Function();butnotthis();", 
    matches = [], 
    blacklist = { butnotthis: true }; 
str.replace(/([a-zA-Z_]+\()/ig, function (match) { 
    if (!blacklist[match.substr(0, match.length - 1)]) 
     matches.push(match); 
}); 
console.log(matches); 

在本例中,我濫用String#replace()方法,因爲它接受將爲每個匹配被解僱回調。我使用這個回調來檢查列入黑名單的函數名稱 - 如果該函數未被列入黑名單,它將被添加到matches數組中。

我用一個HashMap的黑名單,因爲它是編程容易,但你也可以使用一個字符串,陣列等

+0

太棒了,但我試圖找到另一個腳本的正則表達式: https://github.com/LeaVerou/prism/blob/gh -pages/components/prism-clike.js –

0

這裏是一個工作版本:

^(?!(butnotthis\())([a-zA-Z_]+\()/ig 

具體名單

:函數括號

http://regexr.com/38qb8

對於JavaScript中被忽略

var str = "Any_Function();butnotthis();", 
     matches = [], 
     blacklist = ["butnotthis"]; 
// Uses filter method of jQuery 
     matches = str.match(/([a-zA-Z_]+\()/ig).filter(
     function (e) { 
     var flag = false; 
     for (var i in blacklist) { 
      if (e.indexOf(blacklist[i]) !== 0) flag = true; 
     } 
     return flag; 
    }); 
    console.log(matches) 

jsBin:http://jsbin.com/vevip/1/edit

+0

聽起來不錯,但是http://regexr.com/38qf3你的正則表達式不符合所有模式。 –

+0

是的,正則表達式不匹配所有模式。但JavaScript將匹配所有模式 – mohamedrias

0

可以建立功能和關鍵字,其中函數應該大寫字母開頭之間的約定。在這種情況下,正則表達式應該是:

/(^[A-Z][a-zA-z_]+\()/ig