我正在尝试匹配 HTML 文档中包含指向特定文件夹的链接的所有 href 属性,而不是 PDF。我很难让它匹配,我有一个可以获取所有 PDF:
var regexPDF = new RegExp('href=[\'|"](assets/.*?\.pdf)?[\'|"]','gi');
但是我排除 PDF 的尝试并没有让我走得很远。有没有办法做我所追求的,或者我最好只匹配所有文件然后使用条件语句来检查它是否是 PDF?塔!
达伦
我正在尝试匹配 HTML 文档中包含指向特定文件夹的链接的所有 href 属性,而不是 PDF。我很难让它匹配,我有一个可以获取所有 PDF:
var regexPDF = new RegExp('href=[\'|"](assets/.*?\.pdf)?[\'|"]','gi');
但是我排除 PDF 的尝试并没有让我走得很远。有没有办法做我所追求的,或者我最好只匹配所有文件然后使用条件语句来检查它是否是 PDF?塔!
达伦
负模式是正则表达式不太擅长的。但是,您可以执行以下操作:
var regexPDF = /[^.]*?\.(?!pdf)/gi;
// examples
"test.exe".match(regexPDF) // returns "test."
"test.pdf".match(regexPDF) // returns null
这样做的缺点是不显示文件的类型(以防您需要结果),但会过滤掉所有 pdf。它也会像文件名中的点一样中断test.pdf.bak
(但如果需要,您可以增强正则表达式以识别这一点)。
旁注:不要使用 Regex Constructor 而是使用普通的 regex literal notation /.../
。
您可以尝试(?!..)
在最后 4 个字符之前使用负前瞻:
var regexPDF = new RegExp('href=[\'"](assets/(?:.*?(?!\.pdf).{4}|.{0,3}))?[\'"]','gi');
注意:您不需要|
在字符类中使用,因为它被视为文字