如何从JavaScript中的URL中提取特定文本

时间:2014-01-14 17:53:07

标签: javascript regex

我有一个类似http://www.somedotcom.com/all/~childrens-day/pr?sid=all的网址。

我想提取儿童节。怎么做到的?现在我正在这样做

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

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

在没有["~/"]的情况下获得上述文本是否有(肯定会有)短而甜蜜的方式,即childrens-day

谢谢

5 个答案:

答案 0 :(得分: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

请注意,您的正则表达式实际上也没有正确分隔,不确定您是如何得到结果的。

答案 1 :(得分: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

注意:如果您在字符串中有多个网址,则可能需要为非贪婪匹配添加?量词。

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

答案 2 :(得分:1)

将非捕获组与捕获的组一起使用,然后访问匹配数组的[1]元素:

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

请注意,如果将/用作RegEx分隔符,则需要转义{。}}。

答案 3 :(得分:1)

是的,是的。

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

将您需要的内容包装到parenteses组中。不需要对代码进行更多修改。

参考文献:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

答案 4 :(得分:0)

你可以做一个字符串替换。

url.replace('~', '');
url.replace('/', '');

http://www.w3schools.com/jsref/jsref_replace.asp