2011-05-19 74 views
1

我想從一個URL字符串 http://.....?page=1 我知道這行不通刪除此,但我想知道你會怎麼正確地做到這一點。簡單的regex問題

document.URL.replace("?page=[0-9]", "")

感謝

+1

刪除什麼?你的問題沒有很好說明。 – sawa 2011-05-19 02:44:43

+0

你想刪除它嗎?或者你只是想要用它做點什麼?你想要什麼「http:// .....?page = 1」字面上的'...'部分? – matchew 2011-05-19 02:45:39

回答

4

看來你想擺脫協議和查詢字符串。那麼如何連接其餘部分呢?

var loc = window.location; 

var str = loc.host + loc.pathname + loc.hash; 

http://jsfiddle.net/9Ng3Z/


我不能完全肯定的需求是什麼,但是這還算簡單的正則表達式的作品。

loc.replace(/https?\:\/\/([^?]+)(\?|$)/,'$1'); 

這可能是一個幼稚的做法,但給它一個嘗試,看看它是否適合你的需要。

http://jsfiddle.net/9Ng3Z/1/

+0

這是最簡單和最健壯的解決方案。儘管如此,在這種特殊情況下哈希可能是不必要的 – 2011-05-19 02:48:59

+0

這不是一個壞主意,但即使出於好奇的緣故,我想知道正則表達式是如何工作的。謝謝! – switz 2011-05-19 02:49:18

+0

+1推斷真實需求的方法。 – 2011-05-19 02:49:45

2

?是一個正則表達式特殊字符。你需要爲文字?轉義它。也使用regular expression literals

document.URL.replace(/\?page=[0-9]/, "") 
+0

不起作用 – switz 2011-05-19 02:46:53

+0

工程對我來說很好 - http://jsfiddle.net/yBXfK/ – 2011-05-19 02:48:58

+0

那麼,你改變了它:P – switz 2011-05-19 02:54:00

0

你是超級近。要獲取URL,請使用location.href並確保轉義問號。

 
var URL = location.href.replace("\?page=[0-9]", ""); 
location.href = URL; // and redirect if that's what you intend to do 

您也可以去除所有的查詢字符串參數:

 
var URL = location.href.replace("\?.*", ""); 
1

從@patrick DW答案是最實用的,但如果你真的很好奇那麼這裏正則表達式的解決方案是什麼,我會做:

var trimUrl = function(s) { 
    var r=/^http:\/\/(.*?)\?page=\d+.*$/, m=(""+s).match(r); 
    return (m) ? m[1] : s; 
} 
trimUrl('http://foo.com/?page=123'); // => "foo.com/" 
trimUrl('http://foo.com:8080/bar/?page=123'); // => "foo.com:8080/bar/" 
trimUrl('foobar'); // => "foobar" 
+0

真棒,謝謝! – switz 2011-05-19 03:11:53