Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何找到不包含';不能将特定文本与水豚匹配?_Regex_Ruby_Selenium_Capybara_Capybara Webkit - Fatal编程技术网

Regex 如何找到不包含';不能将特定文本与水豚匹配?

Regex 如何找到不包含';不能将特定文本与水豚匹配?,regex,ruby,selenium,capybara,capybara-webkit,Regex,Ruby,Selenium,Capybara,Capybara Webkit,使用Capybara,我习惯于先搜索('div',text:'asdf'),但是有没有办法搜索没有文本的元素 我首先尝试了('div',text://^(?!asdf)/),但它仍然在div上与'asdf'文本匹配 我检查了一下以确保我的正则表达式是正确的: 有什么想法吗?对水豚没有把握,只是猜测您可能正在尝试设计一个表达式,该表达式将排除字符串中有单词边界的asdf,可能接近: ^(?!.*\basdf\b).*$ 如果您希望探索/简化/修改该表达式,将在的右上面板中对其进行解释。在中,如果

使用Capybara,我习惯于先搜索
('div',text:'asdf')
,但是有没有办法搜索没有文本的元素

我首先尝试了
('div',text://^(?!asdf)/)
,但它仍然在div上与'asdf'文本匹配

我检查了一下以确保我的正则表达式是正确的:


有什么想法吗?

对水豚没有把握,只是猜测您可能正在尝试设计一个表达式,该表达式将排除字符串中有单词边界的
asdf
,可能接近:

^(?!.*\basdf\b).*$
如果您希望探索/简化/修改该表达式,将在的右上面板中对其进行解释。在中,如果您愿意,可以查看它与一些示例输入的匹配情况

试验
不确定是否有水豚,只是猜测您可能正在尝试设计一个表达式,该表达式将排除字符串中有单词边界的
asdf
,可能接近:

^(?!.*\basdf\b).*$
如果您希望探索/简化/修改该表达式,将在的右上面板中对其进行解释。在中,如果您愿意,可以查看它与一些示例输入的匹配情况

试验
我目前的解决方法是:

selected_element = 
   (all('div').select do |d|
      d.has_no_text?('asdf', wait: false)
   end).first

如果没有找到,它将返回
nil

我当前的解决方法:

selected_element = 
   (all('div').select do |d|
      d.has_no_text?('asdf', wait: false)
   end).first

如果没有找到,它将返回
nil

在不知道返回的实际元素的文本内容的情况下,很难说是什么错了,但是负正则表达式会变得复杂(特别是当元素有多行内容时),因此可以很安全地假设问题是您的正则表达式。在这种情况下,有时只使用过滤块更容易

first('div') do |element|
  !element.text.include?('asdf')
end

注意:Capybara无法对此进行优化,因此它可能没有那么有效,但偶尔使用并不总是很重要。

如果不知道返回的实际元素的文本内容是什么,很难说是什么错误,但是负正则表达式会变得复杂(特别是如果元素有多行内容)因此,假设问题出在你的正则表达式上是很安全的。在这种情况下,有时只使用过滤块更容易

first('div') do |element|
  !element.text.include?('asdf')
end


注意:水豚无法优化此功能,因此它可能没有那么有效,但偶尔使用并不总是很重要。

@ahmedAbdelhameed谢谢,刚刚尝试过,没有改变任何东西。*$尝试
^(?!asdf)。*$
尝试
^(?:(!sdfg)。*$
。请看这里:。或
^(?。*sdfg.*$
。有关更多信息,请参阅。经常检查其他答案;不要只看被接受/投票最多的内容。@Nils_e我更新了链接的要点以使用HTML和正则表达式-而且效果也很好-所以不确定你做的有什么不同。@Nils_e它实际上应该与相同的文本进行比较-但是我猜优化正在阻碍。为了在第一次尝试时加快元素查找速度,Capybara将反汇编一个正则表达式并将文本片段添加到生成的xpath中——这将应用于未修改的文本,通常不会成为问题,因为如果它不匹配,它只会在没有优化的情况下重试。但是,如果使用否定查找和CSS大小写调整,则可能无法按预期工作。我将在本周晚些时候对此进行研究。@ahmedAbdelhameed谢谢,我刚刚尝试过,没有改变任何东西。*$Try
^(?(!sdfg)。*$
。请看这里:。或
^(?。*sdfg.*$
。有关更多信息,请参阅。经常检查其他答案;不要只看被接受/投票最多的内容。@Nils_e我更新了链接的要点以使用HTML和正则表达式-而且效果也很好-所以不确定你做的有什么不同。@Nils_e它实际上应该与相同的文本进行比较-但是我猜优化正在阻碍。为了在第一次尝试时加快元素查找速度,Capybara将反汇编一个正则表达式并将文本片段添加到生成的xpath中——这将应用于未修改的文本,通常不会成为问题,因为如果它不匹配,它只会在没有优化的情况下重试。但是,如果使用否定查找和CSS大小写调整,则可能无法按预期工作。这周晚些时候我得研究一下。现在让我试试。谢谢。这是非常有用的,我认为它会有助于找到文本,但由于某些原因,它在水豚中仍然不起作用。谢谢你,事实证明这是正确的答案。水豚正在按预期工作,我需要调整我的正则表达式。为了本例的目的,我简化了正则表达式,但这造成了一层混乱。实际的表达式是
^(?。*\b贡献编辑器\b)。*$
,它工作得很好。此字符串与我的原始
^(?!特约编辑)
不匹配。非常感谢。现在让我来试试。谢谢。这是非常有用的,我认为它会有助于找到文本,但由于某些原因,它在水豚中仍然不起作用。谢谢你,事实证明这是正确的答案。水豚正在按预期工作,我需要调整我的正则表达式。为了本例的目的,我简化了正则表达式,但这造成了一层混乱。实际的表达式是
^(?。*\b贡献编辑器\b)。*$
,它工作得很好。此字符串与我的原始
^(?!特约编辑)
不匹配。非常感谢。我不知道你能把一个街区传给搜寻者。这对我很好know@Nils_e查找器和匹配器都支持过滤器块。从性能(和可读性)的角度来看,当内置选项能够满足您的需要时,使用内置选项通常会更好,但在必要时,灵活性是存在的——标记是答案,因为它可以找到元素,而不会造成太多开销或进一步的问题,如种族问题conditions@thomswalpole这是一个很好的解决方案,值得分享。我将标记正确的答案移动到EmmaI的正则表达式解决方案中,我不知道可以将一个块传递给查找器。这对k很好