我使用下面提到的代码来获取特定标记的内容,但是当我尝试执行它时,我会得到一些额外的数据,我不明白它为什么会发生。让我们说如果我搜索标题标记然后我得到" [echo] Title : <title>Unit Test Results</title>,Unit Test Results"
结果,但问题是标题只包含"<title>Unit Test Results</title>"
为什么这个额外的",Unit Test Results"
事情即将发生。
<project name="extractElement" default="test">
<!--Extract element from html file-->
<scriptdef name="findelement" language="javascript">
<attribute name="tag" />
<attribute name="file" />
<attribute name="property" />
<![CDATA[
var tag = attributes.get("tag");
var file = attributes.get("file");
var regex = "<" + tag + "[^>]*>(.*?)</" + tag + ">";
var patt = new RegExp(regex,"g");
project.setProperty(attributes.get("property"), patt.exec(file));
]]>
</scriptdef>
<!--Only available target...-->
<target name="test">
<loadfile srcFile="E:\backup\latest report\Report-20160523_2036.html" property="html.file"/>
<findelement tag="title" file="${html.file}" property="element"/>
<echo message="Title : ${element}"/>
</target>
答案 0 :(得分:0)
RegExp.exec()
的返回值是一个数组。来自the Mozilla documentation on RegExp.prototype.exec():
返回的数组将匹配的文本作为第一项,然后 每个捕获括号的一个项目匹配包含 被捕获的文字。
如果您将以下代码添加到JavaScript ...
var patt = new RegExp(regex,"g");
var execResult = patt.exec(file);
print("execResult: " + execResult);
print("execResult.length: " + execResult.length);
print("execResult[0]: " + execResult[0]);
print("execResult[1]: " + execResult[1]);
...你会得到以下输出......
[findelement] execResult: <title>Unit Test Results</title>,Unit Test Results
[findelement] execResult.length: 2
[findelement] execResult[0]: <title>Unit Test Results</title>
[findelement] execResult[1]: Unit Test Results