2012-05-01 59 views
3

我正在爲Sharepoint編寫一個小應用程序。我試圖從一個現場的中間返回一些文字:在javascript中刪除除字符串的特定部分以外的所有部分

var ows_MetaInfo="1;#Subject:SW|NameOfADocument 
vti_parservers:SR|23.0.0.6421 
ContentTypeID:SW|0x0101001DB26Cf25E4F31488B7333256A77D2CA 
vti_cachedtitle:SR|NameOfADocument 
vti_title:SR|ATitleOfADocument 
_Author:SW:|TheNameOfOurCompany 
_Category:SW| 
ContentType:SW|Document 
vti_author::SR|mrwienerdog 
_Comments:SW|This is very much the string I need extracted 
vti_categories:VW| 
vtiapprovallevel:SR| 
vti_modifiedby:SR|mrwienerdog 
vti_assignedto:SR| 
Keywords:SW|Project Name 
ContentType _Comments" 

所以......我想要回是「這是很多我需要提取的字符串」

我需要一個正則表達式和一個字符串替換嗎?你會如何編寫正則表達式?

+0

你可以張貼'ows_MetaInfo'的實際價值?你的'......'和格式化使測試解決方案變得困難。 –

+0

當然,我將保持與Sharepoint返回的格式完全一致...謝謝! – mrwienerdog

回答

2

是的,你可以使用一個正則表達式(這是他們擅長的事情)。假設你總是希望字符串後管道(|)上線開始以「_comments:SW |」,這裏是你如何解壓:

var matchresult = ows_MetaInfo.match(/^_Comments:SW\|(.*)$/m); 
var comment = (matchresult==null) ? "" : matchresult[1]; 

注意,String對象的.match()方法返回一個數組。第一個(索引0)元素將是整個匹配(在這裏,我們整個匹配就是整行,因爲我們用^和$來錨定它;請注意,在正則表達式之後添加「m」使得這是一個多行正則表達式,允許我們來匹配多行輸入中任何行的開始和結束),而數組的其餘部分是我們使用括號捕獲的子匹配。上面我們已經捕捉到了你想要的那一行,這樣就會出現在數組中的第二項(索引1)中。

如果沒有匹配(「_Comments:SW |」不出現在ows_MetaInfo中),那麼.match()將返回null,這就是爲什麼我們在提取註釋之前測試它。

如果您需要調整其他場景正則表達式,看看在Mozilla開發網絡的正則表達式文檔:https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

+0

我無法得到這個工作(http://jsfiddle.net/JamesHill/xCnap/),但它必須工作,因爲它是被接受的答案。你能提供一個工作jsFiddle嗎? –

+0

爲我工作很好,唯一的事情就是它在Sharepoint,所以我不得不把它扔到var matchresult = $(this).attr('ows_MetaInfo')。match etc ....因爲它是一個CAML/SOAP/Sharepoint野獸。非常感謝! – mrwienerdog

+0

@mrwienerdog,我不懷疑它的工作原理,我只是不明白爲什麼我不能得到它的工作:) –

1

您可以使用此代碼:

var match = ows_MetaInfo.match(/_Comments:SW\|([^\n]+)/); 
if (match) 
    document.writeln(match[1]); 
+0

謝謝anubhava .....我知道你在Jason Clark前一分鐘,但他給了我一個很酷的信息,再加上你有超過20K點他的少數....分享財富! – mrwienerdog

+1

不客氣,我絕對同意你接受答案的選擇。我有我自己upvoted @ jasonclark – anubhava

1

我遠離主管與正則表達式,所以這裏是我的正則表達式少的解決方案。請參閱評論以獲取更多細節

var extractedText = ExtractText(ows_MetaInfo); 

function ExtractText(arg) { 
    // Use the pipe delimiter to turn the string into an array 
    var aryValues = ows_MetaInfo.split("|"); 

    // Find the portion of the array that contains "vti_categories:VW" 
    for (var i = 0; i < aryValues.length; i++) { 
     if (aryValues[i].search("vti_categories:VW") != -1) 
      return aryValues[i].replace("vti_categories:VW", ""); 
    } 

    return null; 
}​ 

這是a working fiddle to demonstrate

+0

感謝詹姆斯,這是更符合我將如何做,因爲我也不是正則表達式的主人。然而,由於野獸的性質,正則表達式更加謹慎...... – mrwienerdog

+0

@mrwienerdog,如果你永遠不需要改變它,那將是更加謹慎的(或者你願意等待SO上的某個人告訴你如何改變它)。我總是嘗試使用我所熟悉的,並且能夠在必要時進行修改。但是,對於他自己的:) –

+0

我只是知道我需要更正確地使用正則表達式! – mrwienerdog