我试图使用正则表达式(JavaScript)提取某个网址,并且在某个网页之后排除字符时遇到问题。这就是我到目前为止所拥有的:
网址:http://www.somesite.com/state-de
使用url.match(/\/[^\/]+$/)[0]
我可以像我想要的那样提取状态。
然而,当URL变为http://www.somesite.com/state-de?page=r并且我执行相同的正则表达式时,它会提取所有内容,包括"?page = r"这是我不想要的。我想只提取state-de而不管它之后是什么(看起来通常是"?"跟着它)
答案 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()