2013-12-09 71 views
3

我被賦予了一項需要很長時間才能完成的任務。替換除正則表達式組之外的所有東西?

圖像說明了一切:

這是我有:(X100次):

enter image description here

,我需要提取此值僅

enter image description here

我如何獲取價值?

我有這個正則表達式使它:

DbCommand.*?\("(.*?)"\);

正如你可以看到它的工作:

enter image description here

而且replace功能(replace to $1)我做獲得純價值:

enter image description here

但問題是,我需要值,而不是不匹配組的其他成員:

問題:換句話說:

我怎樣才能得到如下純化結果:

Eservices_Claims_Get_Pending_Claims_List 
Eservices_Claims_Get_Pending_Claims_Step1 

Here is my code at Online regexer

  • 有什麼方法可以取代「除了匹配的組以外的所有」嗎?

p.s.我知道有這樣做的其他方式,但我更喜歡一個正則表達式的解決方案(這也將有助於我更好地理解正則表達式)

+0

使用RegexBuddy會做這...也通過視覺工作室運行它會給你想要的東西...你的鏈接不起作用,所以我不能幫助更多。 – abc123

+0

@ abc123請閱讀我的PS –

+0

我的意思是使用正則表達式... – abc123

回答

1

你應該能夠做到的全局替換:

public static DataTable.*?{.*?DbCommand.*?\("(.*?)"\);.*?}

所有我已經做了改變,以匹配整個塊,包括使用一堆.*? s的函數定義。

注意:請確保您的正則表達式設置使得點(.)匹配所有個字符,包括換行符。


事實上,如果你想關閉了所有的空格,您可以在前面巴掌\s*$1\n取代:

\s*public static DataTable.*?{.*?DbCommand.*?\("(.*?)"\);.*?}

使用你的測試用例:http://regexr.com?37ibi

+0

所以它應該是'[\ s \ S]' –

+0

太棒了! http://regexr.com?37ibr –

+0

@RoyiNamir當然,或者使用「dotall」選項(在JavaScript中,我認爲這是's'標誌) –

2

不幸的是, JavaScript不理解lookbehind。如果是這樣,你可以改變你的正則表達式匹配.*?前(後視)DbCommand.*?\("和跟隨(前視)"\);

憑藉該解決方案被拒絕,我相信乾淨的解決方案是進行兩場比賽:

// you probably want to build the regexps dynamically 
var regexG = /DbCommand.*?\("(.*?)"\);/g; 
var regex = /DbCommand.*?\("(.*?)"\);/; 
var matches = str.match(regexG).map(function(item){ return item.match(regex)[1] }); 

console.log(matches); 
// ["Eservices_Claims_Get_Pending_Claims_List", "Eservices_Claims_Get_Pending_Claims_Step1"] 

DEMO:http://jsbin.com/aqaBobOP/2/edit

0

嘗試簡單地更換整個文檔使用這個表達式替換:

^(?: |\t)*(?:(?!DbCommand).)*$ 

然後,您將只剩下以字符串開頭的行DbCommand

然後,您可以通過在全局範圍內替換: \r?\n\s*\n來刪除兩者之間的空格。

下面是這個工作的一個例子:http://regexr.com?37ic4

+0

中有一個複選框dotall,這不會產生純化結果。 –

1

你可以使用這個(不忽略大小寫和多選項,具有全局搜索):

pattern: (?:[^D]+|\BD|D(?!bCommand))+|DbCommand [^"]+"([^"]+) 
replace: $1\n 
相關問題