我有一个类似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
。
谢谢
答案 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('/', '');