获取与正则表达式匹配的 HTML 单词的 XPATH

Posted

技术标签:

【中文标题】获取与正则表达式匹配的 HTML 单词的 XPATH【英文标题】:Get XPATH of the words of an HTML which match a regular expression 【发布时间】:2016-05-12 22:42:19 【问题描述】:

有没有办法为每个匹配给定正则表达式的单词获取某种 XPATH?我的意思是导航器向用户显示的单词。 这样我就可以单独操作与每个单词对应的 html

【问题讨论】:

我能想到的最简单的解决方案是使用 jQuery 的 :contains() 选择器。当然,这只是在你使用 jQuery 的情况下。 可见而不是什么? “DOM 路径”是什么意思?您的意思是 XPath 类型的表达式吗?你打算用它做什么?顺便说一句,文本片段(例如单词)无法通过任何方式寻址,无论是 XPath 还是 CSS 选择器。两者都只针对元素 @torazaburo 是的,我是这个意思。如果我解析单词并将它们转换为元素怎么办?会不会太费时间了? 将单词和短语转换为自己的 HTMl 元素是一个不同的问题;这里有很多关于这个的问题,我相信如果你搜索过,你会发现。 【参考方案1】:

我的解决方案: 在 DOM 中,我将每个单词放在一个新创建的 span 元素中。

<span id="foundword1">
word1
</span>

<span id="foundword2">
word2
</span>

【讨论】:

【参考方案2】:

There's not a unique XPath to a node,但这里有一个解决方案,它使用来自 this answer 的函数 cssPath 来返回包含匹配正则表达式的文本的元素的 CSS 路径。

var cssPath = function(el) 
  if (!(el instanceof Element))
    return;
  var path = [];
  while (el.nodeType === Node.ELEMENT_NODE) 
    var selector = el.nodeName.toLowerCase();
    if (el.id) 
      selector += '#' + el.id;
      path.unshift(selector);
      break;
     else 
      var sib = el,
        nth = 1;
      while (sib = sib.previousElementSibling) 
        if (sib.nodeName.toLowerCase() == selector)
          nth++;
      
      if (nth != 1)
        selector += ":nth-of-type(" + nth + ")";
    
    path.unshift(selector);
    el = el.parentNode;
  
  return path.join(" > ");


var startElem = document.body;
var items = startElem.getElementsByTagName("*");
for (var i = items.length; i--;) 
  var match = items[i].innerHTML.match(/fox/);
  if (match) 
    var matched = document.createElement('div');
    matched.innerHTML = cssPath(items[i]);
    document.getElementById("matches").appendChild(matched);
  
<div>The quick brown fox</div>
<div>jumped over the lazy dog.</div>
<div>The slow orange ocelot</div>
<div>crawled under the quick fox.</div>
<hr>
<h4>Matches /fox/</h4>
<div id="matches"></div>

【讨论】:

以上是关于获取与正则表达式匹配的 HTML 单词的 XPATH的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式获取所有前缀+单词+后缀,但没有确切的单词

php正则表达式

python与正则表达式

正则表达式查找单词的最佳匹配子集

需要 c# 正则表达式将逗号列表中的任何单词与另一个字符串中的任何单词匹配

以任何顺序匹配查询中的所有单词的正则表达式