2014-10-09 49 views
0

我的客戶端web服務返回一些帶有GUID的字段,有些則不。 我想寫一個函數,將檢查是否有在該字段中的GUID我需要剝離該GUID,如果GUID不存在,則返回字段,因爲它是。從字段中提取GUID(如果存在)

原型的功能: -

function stripGuid(field) 
{ 
//check if field has GUID then strip off, return new strip field 
//else return field as it is 
} 

樣本數據: -

4922093F-148F-4220-B321-0FBB1843B5DDrec_guid 
4922093F-148F-4220-B321-0FBB1843B5DDdate_add 
tablenam 
sessguid 

我如何調用函數: -

stripGuid(sampleData); 

預期輸出: -

rec_guid 
date_add 
tablenam 
sessguid 
+0

您的預期產出是什麼? – anubhava 2014-10-09 20:35:49

+0

很抱歉忘了添加預期的輸出。現在添加了問題。 – neooo 2014-10-09 20:38:43

+0

但是第二行在輸入中有'date_add',在輸出中有'date_guid' – anubhava 2014-10-09 20:41:10

回答

1

與大多數事情一樣正則表達式時,答案的複雜性取決於你需要支付多少的情況下,例如:

return field.replace(/[0-9a-fA-F\-]{36}/g, ""); 

將覆蓋大多數情況下,是不是太可怕閱讀,但是它在失敗一些非常重要的情況下,所以它可能是

return field.replace(/[0-9a-fA-F]{8}\-?[0-9a-fA-F]{4}\-?[0-9a-fA-F]{4}\-?[0-9a-fA-F]{4}\-?[0-9a-fA-F]{12}/g, ""); 

將更好地爲你(因爲它確保破折號都在正確的地方,並有他們的權數)。更好的選擇取決於您期望輸入的標準化程度以及項目在可讀性和正確性之間的界限。沒有更多的細節,很難說什麼最適合你。

編輯:Nate Kerkhofs是對的,我已經放棄了上述正則表達式的全局標誌,現在已經修復。

+0

但是當我的樣本數據有' - '時會發生什麼,那麼它會起作用嗎?對不起,但我對REGX一無所知,這就是爲什麼我問。 – neooo 2014-10-09 20:49:25

+0

這是可能的,如果GUID存在或不存在,我們可以在返回的字符串中添加一個標誌。 – neooo 2014-10-09 20:57:01

+0

這些正則表達式中的第一個只有在有破折號時纔會起作用,第二個則會使用或不使用破折號。它們都適用於大寫或小寫。如果你想放置一個標誌來代替guid,只需將標誌文本放在替換的第二個參數中而不是空字符串中。 – teryret 2014-10-10 15:43:09

1
return field.replace(/[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}/gi, ""); 

與teryret的解決方案不同,這將刪除所有的GUID,並且也忽略了更容易閱讀的情況。