2011-11-06 55 views
0

我有三种情况:jQuery的URL字符串操作和字符删除

1)当字符串看起来像这样/televisions?3dtv=true - 我需要从它

2)删除?3dtv=true当字符串看起来像这样/televisions?3dtv=true&brand=panasonic - 我需要当字符串看起来像这样/televisions?3dtv=true&brand=panasonic&led=true从中

3)删除&brand=panasonic - 我需要后最后&包括&所以要去除一切 - &led=true

我猜数字2和3是相同的。

任何帮助,将不胜感激。

回答

4

不幸的是,lastIndexOf仅在IE9的支持,因此或者你可以考虑正则表达式:

var href = $(obj).next().attr('href').replace(/(?:&[^&]*|\?[^?]*)$/, ''); 

我的回答相应更新新的要求。该表达式将取代最后的&或从?开始的所有内容(如果没有)。由于交替是从左到右评估的,因此保证&...如果存在则被替换。

表达解释:

/     # start expression 
    (?:    # open non-capturing group 
     &   # match & literally 
     [^&]*  # match any character but & as often as possible 
     |   # OR 
     \?   # match ? literally 
     [^?]*  # match any character but ? as often as possible 
)    # close group 
    $    # match the end of the string 
/    # end expression 
+0

+1支持,我没有意识到这一点。这个链接提到它。 http://msdn.microsoft.com/en-us/library/ff679972%28v=vs.94%29.aspx – Gazler

+0

我刚刚发现最近以及....不幸的是,所有的好功能都不支持在IE中; )(当然我很夸张) –

+0

虽然我错过了一些小东西。在我添加我的第一个东西之后=它没有做什么?s = s,但是它确实?something = something&s = s。所以我需要在这种情况下删除&s = s,并且?something =在第一种情况下被删除。我应该为此创建新的问题吗? –

2

您可以使用子字符串lastIndexOf的组合。

var str = "/televisions?brand=panasonic?3dtv=true"; 
var newstr = str.substring(0, str.lastIndexOf('?')); 

请注意,这只是JavaScript,并没有使用任何方面的jQuery库。

+0

完美,干净,和短。 – switz