具有参数的URL中的正则表达式特定字符串

时间:2017-01-18 12:06:21

标签: javascript regex

请在以下网址的参数内部实现字符串“unser-leitbild.html”。

/folderone/foldertwo/filename.php?parameter=http%3A%2F%2Fwww.igmetall-sprockhoevel.de%2Fueber-uns%2Funser-leitbild.html&utf8=0&dir=sprockhoevel&updateJquery=jquery-1.6.2.min.js

这是我的要求: 我期待创建一个变量给我FILENAME.html的FILENAME。这里的特殊问题是需要从URL的参数中获取。 FILENAME将始终以“.html”结尾

好的:所以我的目标是从上面的URL中接收字符串“unser-leitbild”。 我们想要使用javascript和/或正则表达式。

我获得了上面提到的网址:

var URL = (location.pathname+location.search).substr(1); 
var filename = URL;
alert(filename);

但是如何提取STRING“unser-leitbild”并将该String作为变量获取?

注意:实际文件名将始终为filename.php。但是这里的filename.php无关紧要!!

提示一:我们总是需要搜索filename.HTML。哪个只能在参数部分中找到。

提示两:在参数部分内部,我们总是会找到一个文件名'.html'。 html结尾总是只会出现一次。

我们希望找到文件名“INSIDE THE PARAMETER-SECTION”并提取html文件的名称而不是它的结尾。在我们的例子中:“unser-leitbild”

RESULT ='unser-leitbild'

为了帮助您入门,我的尝试失败http://pastebin.com/Mt2ZTUUb

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

\?parameter.*(?:\/|%2F)([^.]*).html

Explanation

const regex = /\?parameter.*(?:\/|%2F)([^.]*).html/g;
const str = `/folderone/foldertwo/filename.php?parameter=http%3A%2F%2Fwww.igmetall-sprockhoevel.de%2Fueber-uns%2Funser-leitbild.html&utf8=0&dir=sprockhoevel&updateJquery=jquery-1.6.2.min.js`;
let m;

while ((m = regex.exec(str)) !== null) {
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    console.log(m[1]);
}

答案 1 :(得分:0)

我很感谢你的回复。

以下是一些反馈:我测试了您的解决方案,发现它非常稳定。我只是遇到了一个错误,它发生在起始页上,详见下文。通过我的43页:解决方案就像一个魅力!在代码片段应用于我的生产环境之前,我稍微调整了代码:

     const regex = /\?url.*(?:\/|%2F)([^.]*).html/g;    

   var str = (location.pathname+location.search).substr(1);    

  let m;

  while ((m = regex.exec(str)) !== null) {
      if (m.index === regex.lastIndex) {
          regex.lastIndex++;
      }
  console.log(m[1]);
  }

首页上出现的唯一意外问题,因为起始页没有文件名;)“首页”只有domain.com但没有/index.html。正则表达式无法找到文件名,只是因为没有。我能够轻松地解决这个小问题:我使用JQuery为startpage创建一个exeption,并且在所有页面上都很好。我真的很有意思。我只收到一个答案,但答案完全是当场的! Maverick真的花时间深入挖掘我的问题,直到他完全理解我手头的问题为止。而Maverick在他的第一个答案中解决了这个问题。非常精确的答案,我印象深刻& greateful。问题解决了!