2014-01-14 48 views
0

我有一個像http://www.somedotcom.com/all/~childrens-day/pr?sid=all這樣的網址。如何在JavaScript中從url中提取特定文本

我想提取兒童日。如何獲得?現在我這樣做

url = "http://www.somedotcom.com/all/~childrens-day/pr?sid=all" 
url.match('~.+\/'); 

但我得到的是["~childrens-day/"]

有沒有(絕對會有)短而甜美的方式來獲得上述文本沒有["~/"],即只是childrens-day

謝謝

回答

2

你可以使用一個否定character class和捕獲組()並參照捕獲組#1。字符類[ ]內的插入符號(^)被視爲否定運算符。

var url = "http://www.somedotcom.com/all/~childrens-day/pr?sid=all"; 
var result = url.match(/~([^~]+)\//); 
console.log(result[1]); // "childrens-day" 

Working demo

注意:如果你有很多的URL可能要添加?量詞的非貪婪匹配字符串裏。

var result = url.match(/~([^~]+?)\//); 
+0

這是否定匹配? –

+1

查看編輯答案。 – hwnd

2

像這樣:

var url = "http://www.somedotcom.com/all/~childrens-day/pr?sid=all" 
var matches = url.match(/~(.+?)\//); 
console.log(matches[1]); 

工作例如:http://regex101.com/r/xU4nZ6

請注意,你的正則表達式實際上並沒有正確分隔要麼,不知道你是怎麼的結果你做到了。

+0

感謝您分享此鏈接http://regex101.com/r/xU4nZ6 我對這個網站的新手似乎是一個不錯的去處。 –

+0

你說得對,我得到的表達與我所報道的不同。我已經糾正了自己的道歉。 –

+1

儘管如此,這是做你想做的,這就是所有重要的事情:) – brandonscript

1

使用非捕獲組與捕獲組,然後進入比賽陣列的[1]元素:

(?:~)(.+)(?:/) 

請記住,你需要逃避你/如果用它也可以作爲你的正則表達式的分隔符。