如何使用正则表达式和window.location.href.indexOf()在URL路径中定位特定文件夹?

时间:2018-08-08 18:00:13

标签: javascript jquery regex regex-negation ab-testing

我正在进行a / b测试,该测试的目标是在网站的不同级别中具有相同类名的元素:

例如网址:www.sitename.com/service-provided/state/region/city。

当我进入城市级别页面时,我不希望我的代码针对特定元素运行。有100多个不同的城市,因此不希望使用要排除的网址列表。

有没有一种方法可以使用window.location.href.indexOf()和正则表达式仅定位路径的前三个文件夹?

下面是我要实现的示例,如果url在路径的前3个文件夹中具有任何值,则仅运行代码,而不是如果路径进入第4个(城市)文件夹。

$(document).ready(function () {
    if (window.location.href.indexOf("?/(.*)/(.*)/(.*)") > -1) {
       $(".className").css({"padding-right":"5%"});
     }
});

我愿意接受其他可能有效的方法。

谢谢。

使用的解决方案:

p = window.location.pathname.split('/');

if (p.length < 5) {
     $(".className").css({"padding-right":"5%"});
}

2 个答案:

答案 0 :(得分:1)

像这样

const someURLs = [
  'www.sitename.com/massage/new-york/east-coast/manhatan',
  'www.sitename.com/massage/new-york/east-coast/bronx',
  'www.sitename.com/massage/texas/south/austin',
  'www.sitename.com/accounting/texas/south/atlanta',
];

const firstThreeFolders = /\/([^\/]+\/){3}/;

someURLs.forEach(url => {

  console.log( url.match(firstThreeFolders)[0] );

});

说明:

匹配一个正斜杠,然后多次匹配不是正斜杠的任何东西,重复三次。

答案 1 :(得分:1)

您可以通过splitpathname来实现自己的目标。这样,您可以从路径中拉出各个零件:

var p = window.location.pathname.split('/') - 1;
/*
www.sitename.com/service-provided/state/region/city
pathArray = [service-provided, state, region, city]
*/
if (p.length == 4) {
  state = pathArray[1];
  region = pathArray[2];
  city = pathArray[3];
}