3

私はSharepoint用の小さなアプリを書いています。返されたフィールドの途中からテキストを抽出しようとしています:

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"

だから......私が返したいのは、「これは私が抽出する必要がある文字列です」だけです

正規表現と文字列の置換が必要ですか? どのように正規表現を書きますか?

4

3 に答える 3

2

はい、これには正規表現を使用できます (これは、彼らが得意とする類のものです)。「_Comments:SW|」で始まる行のパイプ (|) の後の文字列が常に必要であると仮定すると、それを抽出する方法は次のとおりです。

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

String オブジェクトの .match() メソッドは配列を返すことに注意してください。最初の (インデックス 0) 要素は一致全体になります (ここでは、^ と $ で固定しているため、一致全体は行全体です。正規表現の後に「m」を追加すると、これが複数行の正規表現になることに注意してください。配列の残りの部分は、括弧を使用してキャプチャしたサブマッチです。上で、必要な行の部分をキャプチャしたので、配列の 2 番目の項目 (インデックス 1) に表示されます。

一致するものがない ("_Comments:SW|" が ows_MetaInfo に表示されない) 場合、.match() は null を返します。これが、コメントを引き出す前にテストする理由です。

他のシナリオに合わせて正規表現を調整する必要がある場合は、Mozilla Dev Network の正規表現ドキュメントを参照してください: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

于 2012-05-01T19:28:21.970 に答える
1

次のコードを使用できます。

var match = ows_MetaInfo.match(/_Comments:SW\|([^\n]+)/);
if (match)
   document.writeln(match[1]);
于 2012-05-01T19:26:09.067 に答える
1

私は RegEx の能力にはほど遠いので、RegEx を使用しないソリューションを次に示します。詳細については、コメントを参照してください。

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;
}​

これは、実演するための実用的なフィドルです。

于 2012-05-01T19:27:11.207 に答える