Javascript匹配url的一部分,如果声明基于结果

时间:2010-06-07 09:27:20

标签: javascript

以下是我尝试匹配的网址示例:http://store.mywebsite.com/folder-1/folder-2/item3423434.aspx

我想要匹配的是http://store.mywebsite.com/folder-1,除了“folder-1”总是一个不同的值。我无法弄清楚如何为此写一个if语句:

示例(伪代码)

if(url contains http://store.mywebsite.com/folder-1)
do this

else if (url contains http://store.mywebsite.com/folder-2)
do something else

4 个答案:

答案 0 :(得分:4)

为了保持简单......

if(location.pathname.indexOf("folder-1") != -1)
{
    //do things for "folder-1"
}

如果值“folder-1”可能出现在字符串的其他部分,这可能会给你误报。如果您已经确定不是这种情况,那么提供的示例就足够了。

答案 1 :(得分:3)

我会split()字符串并检查网址的个别组成部分:

var str = "http://store.mywebsite.com/folder-1/folder-2/item3423434.aspx"

// split the string into an array of parts
var spl = str.split("/");

// spl is now [ http:,,store.mywebsite.com,folder-1,folder-2,item3423434.aspx ]
if (spl[4] == "folder-1") {
    // do something
} else if (spl[4] == "folder-2") {
    // do something else
}

使用此方法,也可以轻松检查URL的其他部分,而无需使用带有子表达式捕获的正则表达式。例如匹配路径中的第二个目录将是if spl[5] == "folder-x"

当然,您也可以使用indexOf(),这将返回字符串中子字符串匹配的位置,但此方法不是那么动态,如果有的话,它不是非常有效/易于阅读要成为很多else条件:

var str = "http://store.mywebsite.com/folder-1/folder-2/item3423434.aspx"
if (str.indexOf("http://store.mywebsite.com/folder-1") === 0) {
    // do something
} else if (str.indexOf("http://store.mywebsite.com/folder-2") === 0) {
    // do something
}

答案 2 :(得分:0)

假设基本网址已修复且文件夹编号可能非常大,则此代码应该有效:

var url = 'http://store.mywebsite.com/folder-1/folder-2/item3423434.aspx'
  , regex = /^http:..store.mywebsite.com.(folder-\d+)/
  , match = url.match(regex);
if (match) {
  if (match[1] == 'folder-1') {
    // Do this
  } else if (match[1] == 'folder-2') {
    // Do something else
  }
}

答案 3 :(得分:0)

只需使用URL parting in JS,然后就可以将URL与简单字符串条件或正则表达式匹配