在特定字符之后提取URL中的字符到特定字符

时间:2015-07-09 16:22:56

标签: javascript regex

我试图使用正则表达式(JavaScript)提取某个网址,并且在某个网页之后排除字符时遇到问题。这就是我到目前为止所拥有的:

网址:http://www.somesite.com/state-de

使用url.match(/\/[^\/]+$/)[0]我可以像我想要的那样提取状态。

然而,当URL变为http://www.somesite.com/state-de?page=r并且我执行相同的正则表达式时,它会提取所有内容,包括"?page = r"这是我不想要的。我想只提取state-de而不管它之后是什么(看起来通常是"?"跟着它)

4 个答案:

答案 0 :(得分:2)

这可能有效:

var arr = url.split("/")
arr[arr.length - 1].split("?")[0]

答案 1 :(得分:1)

我建议你阅读一般的正则表达式。你想要做的是让正则表达式在它击中时停止?在网址中。

使用捕获组来选择您想要的匹配部分在这里也可能有用。

示例:

RoutingApprovals

答案 2 :(得分:0)

如果你想通过正则表达式来试试这个:

url.match(/https?:\/\/([a-z0-9-]+\.)+[a-z]+\/([a-z0-9_-])\/?(\?.*)?/)[1]

或者你可以使用JQuery来做到这一点:

var url = 'http://www.somesite.com/state-de?page=r#mark4';

// Create a special anchor element, set the URL to it

var a = $('<a>', { href:url } )[1];

console.log(a.hostname);
console.log(a.pathname);
console.log(a.search);
console.log(a.hash);

答案 3 :(得分:0)

我尽可能避免使用过于复杂的RegEx,因此我倾向于在多个步骤中执行此操作(使用.replace()):

var stripped = url.replace(/[?#].*/, ''); // Strips anything after ? or #

您现在可以执行更简单的转换以获取状态,例如:

var state = stripped.split('/').pop()