正则表达式选择缺少子字符串的所有单词

时间:2018-04-13 03:01:20

标签: regex search

我正在尝试选择缺少特定子字符串的所有行。在这种情况下,任何行都缺少aria-label属性。

<section class="test-class" aria-label="some text">
<section class="test-class" aria-label="">
<section class="test-class">
<section class="test-class" >
<div class="test-class">

期望的结果:

<section class="test-class">
<section class="test-class" >

我读了一些其他的问题和答案,并尝试了一个负面的展望,但我想我可能有错误的语法?我正在尝试利用它在我的文本编辑器中运行搜索。

Here's my regex so far/test-class.*?!aria-label/g

2 个答案:

答案 0 :(得分:1)

(?!.*aria-label.*)(<.+>)

https://regex101.com/r/i0aacp/13/

<.+>表示匹配<>

之间的所有内容

否定前瞻意味着< & >,A aria-label之间的值不是其中的一部分。

您的测试人员链接https://regexr.com/3nr4f

答案 1 :(得分:1)

negative lookahead的语法为(?!

假设您的字符串以<开头,以>结尾,您无需验证class="test-class"

匹配您可能使用的标签\baria-label="[^"]*"

您可以在否定前瞻(?!中使用它来断言标签不会出现在字符串中:

^(?!.*\baria-label="[^"]*").*$

这符合

  • ^从字符串的开头
  • (?!否定前瞻,断言以下内容
    • .*任何字符零次或多次
    • \baria-label=匹配wordboundary和aria-label =
    • "[^"]*"匹配",非"零次或多次,然后"
  • )关闭否定前瞻
  • .*$如果该断言没问题,请将任何字符匹配零次或多次,直到字符串结束。

&#13;
&#13;
const strings = [
  "<section class=\"test-class\" aria-label=\"some text\">",
  "<section class=\"test-class\" aria-label=\"\">",
  "<section class=\"test-class\" testaria-label=\"\">",
  "<section class=\"test-class\">",
  "<section class=\"test-class\" >"
];

let pattern = /^(?!.*\baria-label="[^"]*").*$/;

strings.forEach((s) => {
  console.log(s + " ==> " + pattern.test(s));
});
&#13;
&#13;
&#13;