用于使用锚点进行查询的javascript正则表达式

时间:2015-10-23 18:56:02

标签: javascript regex testing anchor query-string

我正在制作一个包含多个页面的网络应用程序。但它将全部加载到客户端。看起来它在技术上是如何在同一页面上,我将在#之后使用参数来跟踪当前页面状态,同时防止回发。我的问题是我似乎无法用正则表达式行选择所有参数。当我在线使用测试工具时,分割的正则表达式工作,但当我在我的网页上使用它时,它不起作用。

//Test data for url
//https://test.ca?hi&hey=3&test=oh+hi+mark#edit&e=1

var split = /([^&#=]+)=?([^&#]*)/g;
var url = window.location.href;
var match = split.exec(url);

//this outputs match with a length of three 
//[0] = 'https://test.ca?hi'
//[1] = 'https://test.ca?hi'
//[2] = ''

我认为这应该是一个已解决的问题,但我似乎无法找到答案。我想这导致了另一个问题。我是以完全错误的方式解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您正在使用正则表达式错误。您只需打印整个匹配,同时需要访问捕获的组,同时迭代1个字符串中的所有匹配项。

以下是一个示例代码段:



var re = /([^&#=]+)=?([^&#]*)/g; 
var str = 'https://test.ca?hi&hey=3&test=oh+hi+mark#edit&e=1';
var match;
 
while ((match = re.exec(str)) !== null) {
    document.write(match[1] + "<br/>" + match[2] + "<br/><br/>");
}
&#13;
&#13;
&#13;

请注意,第一场比赛是&#34; main&#34; URL的一部分。后续匹配是参数值对。

答案 1 :(得分:0)

请尝试使用window.location.hash。它将返回哈希值(在您的示例网址中,它将是#edit&amp; e = 1),您可以使用字符串操作来执行任何操作。