2014-10-12 34 views
0

我環顧了StackOverflow,但找不到答案!與reg-exp鏈接函數分割字符串

無論如何,我想知道如何使用正則表達式在JavaScript中執行下列操作。

我有一個字符串

bla().func1($(ele).attr("data")).func2.func3("test")... ; 

,我想提取FUNC1,FUNC2,FUNC3 ......從給定的字符串,任何人對如何做到這一點的例子嗎?

請記住,該函數名稱的變化,所以它們不是FUNC1,FUNC2 ......他們可以負荷,過去,月亮......無論

+1

你想'func1'和'func2'但不是'attr'?這會很棘手。你還需要處理'blah()[「func1」](...)案件嗎? – 2014-10-12 08:57:40

+0

嗨T.J. Crowder ...不是int。在blah()只是與blah相關的基本函數,如func1,func2 ...乾杯c_bb – user2083317 2014-10-12 08:58:41

+0

你試過了什麼正則表達式?你不明白的是什麼? – 2014-10-12 08:58:59

回答

0

反覆去掉最裏面的括號表達式:

var str = 'bla().func1($(ele).attr("data")).func2.func3("test")... '; 
 
var expression = /\([^(]*?\)/g; 
 
    
 
while (expression.test(str)) { str = str.replace(expression, ''); } 
 

 
document.write(str.split('.').slice(1).join(' '));

但是,你不應該這樣做(爲什麼你想?)。 JS應該被JS解析器解析。例如,如果有一個包含括號的字符串文字,上述內容將會失敗。你應該使用Esprima解析這個並分析結果分析樹。

1

試試這個:

var str = 'bla().func1($(ele).attr("data")).func2("test")'; 
alert(str.split(/(?:\.)\w+\d+(?=\()/g)); 

還有小提琴: http://jsfiddle.net/cv6avhfb/3/

同時使用作爲分隔符子像「.func1(」,「.func2(」,「.abc3(」等此代碼將拆分份數的字符串如果函數名具有不同結構你只需要改變\w+\d+正則表達式的一部分。

下面是這段代碼的結果:

bla(),($(ele).attr("data")),("test") 

如果你想知道更多關於正則表達式中的javascript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

+0

你好Dr. Nefario ...函數名不是nessecary func(somthing)...可以加載,轉換等等,並且一直改變...所以它可以是blah()。test() .moon(「無論」)...乾杯c_bb – user2083317 2014-10-12 09:05:56

+0

嗨Nefario博士...當我做var str ='bla()。test($(ele).attr(「data」)).load(「test 「)'; (str.split(/(?:\。)\ w +(?= \()/ g));我得到了bla(),($(ele),(「data」)),(「test」 )和不幸的是,這不是一個有用的輸出..對不起..謝謝你反正看着它......歡呼聲c_bb – user2083317 2014-10-12 09:51:44

+0

你正在尋找什麼結果? – 2014-10-12 09:57:07