2012-08-06 67 views
1

我想清理一個URL(rss提要),以便在最後一個.rss(or.html)之後不再有字符。我正在使用w3schools.com上的TryIt編輯器進行測試。以下是我的測試代碼:使用Javascript和正則表達式來修改URL的末尾

var str="http://rss.cnn.com/rss/cnn_world.rsstest"; 
var patt1=/(.*[.rss|.html]).*/g; 
var result = str.replace(patt1, "$1"); 
document.write(result); 

我遇到的問題是,所顯示的結果是

http://rss.cnn.com/rss/cnn_world.rsstest 

即「測試」並沒有移除。我想知道如果有人可以檢查我的正則表達式並解釋我做錯了什麼?

謝謝。

+0

失去[],逃脫。至 \。 (注意這也將殺死任何查詢字符串參數...) – 2012-08-06 15:06:26

回答

2

首先,我建議jsFiddle或其他一些測試服務。原諒my bias

其他一些應答者似乎已經完全忽略了一點,所以要解釋你的錯誤:

  1. []不組—它定義了一個字符類。你寫的東西實際上與一個字符相匹配,即任何一個:.|hlmrst
  2. 如果沒有$錨點,那麼兩個.*可能不符合您的預期。

嘗試,而不是:

/(\.rss|\.html).*$/g 

這裏的jsFiddle演示。

+0

你的答案很好,因爲我和晴朗的人一起工作,而且我們都在處理這個問題,所以我們正在尋找.rss或.html的最後一個實例,給出這個例子'http://rss.cnn。 COM/RSS/cnn_world.rss/cnn_world。rsstest'作爲第二個測試,你的正則表達式不是貪婪的,所以它會查找第一個迭代,而。*將意味着第二個實例將會消失。有沒有辦法將它標記爲貪婪的,在'?'的對面? – Churk 2012-08-06 15:27:41

+1

@Churk - 事實確實如此。使用負向前瞻斷言:'/(\。rss | \ .html)(?!。* \。rss | \ .html)。* $/g''。請參閱http://jsfiddle.net/2f4jx/。 – 2012-08-06 15:31:00

1

應該是var patt1=/(\.rss|\.html).*$/g;因爲。是特殊字符

+1

請參閱:http://stackoverflow.com/questions/9466768/what-is-this-regular-expression-looking-for「。」是在[] – Churk 2012-08-06 15:14:09

+0

@Stano內我的評論指的是'因爲。是特殊的字符',並且是最初發布的內容'var patt1 = /(。* [。rss | .html])。*/g;'。點[]內的點不是特殊字符,它們被[]字面化。 – Churk 2012-08-06 16:50:47

0

你爲什麼不這樣做

var str="http://rss.cnn.com/rss/cnn_world.rsstest"; 
str.replace(/test$/, ""); 
+0

「測試」只是我的樣品測試,理想情況下它應該取代.rss – SunN 2012-08-06 15:08:54

+0

之後的任何東西,因爲它可能不會「測試」它可以是任何東西。 – 2012-08-06 15:08:58

1

嘗試使用子

string.substring(from, to) 

和lastindexof功能

string.lastIndexOf(searchvalue) 

它結合:

var result = str.substring(0, str.toLowerCase().lastIndexOf("rss") + 3); 

最後:

if (str.toLowerCase().lastIndexOf(".rss") > str.toLowerCase().lastIndexOf(".html")) 
{ result = str.substring(0, str.toLowerCase().lastIndexOf(".rss") + 4); 
} else { 
result = str.substring(0, str.toLowerCase().lastIndexOf(".html") + 5); 
} 
+0

編輯,以擺脫較低或大寫和我的其他錯誤;-) – 2012-08-06 15:17:45

+0

如果URL以.html結尾怎麼辦?這不起作用。 – 2012-08-06 15:25:32

+0

你可以通過比較兩者的索引來檢查whers .rss或html是否結束,然後決定你在lastIndexOf中使用哪個字符串。 – 2012-08-06 15:28:36

相關問題