2012-06-19 145 views
0

我不是一個正規表達專家,至少可以說。我正在尋找的是一個正則表達式,它從字符串中提取特定格式的多個值。正則表達式從字符串中提取多個格式化值

例字符串: 「客戶[記錄:客戶ID]從[記錄:CityID]的類型爲[記錄:TYPEID]」

我需要的是,讓我所有的值在此字符串是一個表達式格式爲「[record:XXXXX]」。因此,在這個例子中它會給我:

[ 「客戶ID」, 「CityID」, 「TYPEID」]

能不能做到?

+0

是否使用了特定的語言?你可以用正則表達式來做你想做的事情,但這取決於你使用的結構和語言。 – npinti

+0

我正在尋找一個解決方案在JavaScript中。 –

回答

0

在Javascript中:

var pattern = '\\[record:([a-zA-Z0-9]+)\\]'; 
var records = new RegExp(pattern, 'g'); 
var extract = new RegExp(pattern); 

var string = "Customer [record:CustomerID] from [record:CityID] is of type [record:TypeID]" 

var matches = string.match(records); 
console.log(matches); 
> [ '[record:CustomerID]', 
    '[record:CityID]', 
    '[record:TypeID]' ] 

var records = []; 
for (var i=0; i<matches.length; i++) { 
    var match = matches[i].match(extract); 
    records.push(match[1]); 
} 
console.log(records) 
> [ 'CustomerID', 
    'CityID', 
    'TypeID' ] 

可能不是最簡潔的解決方案,但乾淨,(希望)理解。

  • 方括號不應被特殊處理通過將\在他們面前被轉義
  • 的組要提取被包裹在(),形成了一個正則表達式組/子模式
  • 圖案[a-zA-Z0-9]+裝置「匹配一串字母(大寫或小寫)或數字」,+指定「長度爲一個或多個」。 A *這裏的意思是「長度爲0或更長」。

這裏我使用了兩個基於相同模式的正則表達式。它們使用不同的選項進行編譯:g標誌告訴正則表達式查找字符串中的所有匹配項。有了這個標誌,我們就不會得到與結果匹配的組,只是匹配的整個字符串。第二個正則表達式編譯時沒有g標誌,所以我們可以使用它來提取匹配的組。

+0

不確定我是否清楚:我給出的示例字符串是我想要使用的**精確**字符串。 –

+0

沒錯。在我的(已更新的)示例中使用正則表達式,並將它提取到數組中。 – chesles

+0

@chesles:就像參考文獻一樣,當回覆評論時,如果您使用@ @用戶名,您的回覆將顯示在用戶名的通知中。這將使他們能夠迴應您的任何評論。 – npinti

0

其實,像sed可以做的伎倆,即:

echo "Customer ..." | sed -e 's/\][^[]*\[record:/","/'g -e 's/^.*record:/["/' -e 's/].*$/"]/ 
相關問題