使用xpath查询将xpath正则表达式捕获组作为字符串返回


Return an xpath regex capturing group as a string with xpath query

上下文

假设以下HTML

....
<p>Whatever</p>
<div>Whatever DIV78232 Everwhat</div>
....

问题:

如何返回包含DIVnnnnn的纯文本字符串,其中nnnnn表示任何数字。

到目前为止我的调查:

xPath replace()函数将替换在当前DOM中找到的模式。

replace(.,'.*?(DIV'd+).*','$1') => DIV78232

为什么我被阻止

因为我希望查询以字符串的形式返回"DIV78232",而不在DOM中实际替换它,就像它为查询/p/text()返回"Whatever"一样[我正在FirePath firefox扩展上尝试所有这些]

注意:根据官方DOCS

"replace()返回第一个参数的值与正则表达式匹配的子字符串,正则表达式是第二个参数由作为值的替换字符串替换第三个论点。"

最终目的

我的最终目的是从这个(位于HTML中)中获得与'.*?image:.*?"(.+?)".*'匹配的(字符串)IMAGE URL:

在这种情况下,查询//*[matches(.,'.*?image:.*?"(.+?)".*','i')]返回整个节点,但我只想要第一个捕获组,它将是IMAGE URL。

<script>...vp&output=xml_vast2&unviewed_position_start=1&
url='+encodeURIComponent(location.href)+'
description_url='+encodeURIComponent(location.href)+'&
image:   "https://domain.com/xxxxxxx/public_images/2015.12/article/56797be1c46188ac438b45c3.jpg", // stretching: 'fi..</script>

我花了很长时间,但这是我通过组合replace()tokenize()得到的结果

tokenize(replace(.,'.*?image:.*?"(.+?)".*?',':@:$1:@:'),':@:')[2]

返回上面提到的片段中的图像URL。

为什么/如何工作

  • Replace()匹配图像并用我自己的令牌分隔符":@:"包装捕获组(可以是任何原始的)
  • Tokenize()将替换的字符串分为三部分,这是我要查找的第二个捕获组(它将由三部分组成,因为文档不太可能在其他地方包含":@:")

有没有更快的方法来实现这一点?

谢谢。一切顺利。和平