正则表达式 - 找到网址的一部分并替换以帮助跟踪PDF

时间:2016-10-20 08:40:41

标签: regex dreamweaver

我正在尝试通过Google分析在我的网站上跟踪PDF。在Dreamweaver中使用查找和替换我需要一个正则表达式来查找所有PDF URL并在最后添加PDF的文件名。所以:

http://mysite/strategy/annual-plan-16-17.pdf

变为

http://mysite/strategy/annual-plan-16-17.pdf?pdf=annual-plan-16-17

不幸的是,尽管我已经学习了REGEX,但我尚未达到这种复杂程度,所以对任何建议都会感激不尽。非常感谢。

2 个答案:

答案 0 :(得分:1)

我认为你可以使用

https?://\S*/([^/]+)\.pdf

并替换为$0?pdf=$1

请参阅regex demo

<强>详情:

  • https?:// - http://https://
  • \S* - 零个或多个非空格符号,尽可能多到最后一个
  • / - 斜杠
  • ([^/]+) - (第1组)除/
  • 以外的一个或多个字符
  • \.pdf - 文字.pdf

如果您只需要在?之后抓取那些没有.pdf的链接,请在模式的末尾添加(?!\?)否定前瞻。

在替换模式中,$0插入整个匹配文本,$1仅插入捕获到组1中的内容。

答案 1 :(得分:0)

这适用于由&#39; - &#39;分隔的名称。以及由&#39; - &#39;分隔的任意数量的数字和字母,不会导致任何数字和字母。它将返回字母和numberParts部分,并在URL的末尾添加?pdf =。

&#13;
&#13;
var value = "http://mysite/strategy/annual-plan-16-17.pdf";
var matches = value.replace(/([^\/\s]+)(.pdf)/g, "$1$2?pdf=$1");
console.log(matches)
&#13;
&#13;
&#13;

这是通过将匹配分成两组()来完成的,它们是:

  1. 第一个使用[^ / \ s。] +获取用短划线分隔的名称,以获得任何数字,而不是&#39; \&#39;,&#39;。&# 39;或者是一个白色空间,这基本上可以得到&#39; .pdf&#39;中的所有字符。到/之前。

  2. 下一组使用.pdf匹配.pdf(显然) 然后它将整场比赛替换为+?pdf = +第一组。

  3. 如果您希望将字母部分xxxxx-xxxxx-1111.pdf写入.pdf?pdf = xxxxx-xxxxx,那么您可以使用它。

    &#13;
    &#13;
    var value = "http://mysite/strategy/annual-plan-16-17.pdf";
    var matches = value.replace(/([^\/0-9]*[^-\/0-9])(-??[^/.]*)(.pdf)/g, "$1$2$3?pdf=$1");
    console.log(matches)
    &#13;
    &#13;
    &#13;

    这是通过将匹配分成3组()来完成的,它们是:

    1. 第一个使用[^。/ 0-9] *将由破折号分隔的名称取得任何数字,而不是&#39;。&#39;,&#39; /& #39;或者数字,然后使用[^ - ./ 0-9]确保匹配不以&#39; - &#39;结尾。这有效地匹配由 - 不包含数字的单词。

    2. 这个小组使用 - ??为了尽可能少地匹配(包括没有),然后用[^ /] *来匹配任何没有&#39; ^&#39;或者&#39; /&#39;。这有效地匹配由 - 包含数字的单词。

    3. 使用.pdf来匹配.pdf。如果你想确保它在一个字符串的末尾,你可以使用.pdf $

    4. 然后将此匹配替换为自身+?pdf = +第一个匹配组。