我正在尝试选择缺少特定子字符串的所有行。在这种情况下,任何一行都缺少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" >我读了一些其他的问题和答案,并试图消极地展望未来,但我认为我可能有错误的语法?我试图利用这一点在我的文本编辑器中进行搜索。
到目前为止,这是我的准则:/test-class.*?!aria-label/g
发布于 2018-04-13 03:08:00
(?!.*aria-label.*)(<.+>)https://regex101.com/r/i0aacp/13/
<.+>意味着匹配<和>之间的一切
负展望意味着< & >、Aaria-label之间的值不是它的一部分。
您的测试人员链接https://regexr.com/3nr4f
发布于 2018-04-13 07:52:34
负前瞻的语法是(?!
假设您的字符串以<开头,以>结尾,则不必验证class="test-class"
要匹配标签,您可以使用\baria-label="[^"]*"。
您可以在负前瞻性的(?!中使用它来断言标签不在字符串中出现:
^(?!.*\baria-label="[^"]*").*$
,这将与匹配
^(?!负前瞻性断言了后面的内容.*任何字符0或更多次\baria-label=匹配单词边界和aria-label="[^"]*"匹配",而不是" 0次或多次,然后是"
)关闭负前瞻.*$ (如果该断言没有问题),在字符串结束之前匹配任何字符0或更多次。
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));
});
https://stackoverflow.com/questions/49808655
复制相似问题