我正在尝试选择缺少特定子字符串的所有行。在这种情况下,任何行都缺少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
答案 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 = "[^"]*"
匹配"
,非"
零次或多次,然后"
)
关闭否定前瞻.*$
如果该断言没问题,请将任何字符匹配零次或多次,直到字符串结束。
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;