我正在为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"
所以......我想要的只是“这是我需要提取的字符串”
我需要正则表达式和字符串替换吗?你会怎么写正则表达式?
答案 0 :(得分: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 Dev Network上的正则表达式文档:https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions
答案 1 :(得分:1)
您可以使用此代码:
var match = ows_MetaInfo.match(/_Comments:SW\|([^\n]+)/);
if (match)
document.writeln(match[1]);
答案 2 :(得分:1)
我对RegEx远远不够,所以这是我的RegEx-less解决方案。请参阅评论以获取更多详细信息。
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;
}