我正在制作一个包含多个页面的网络应用程序。但它将全部加载到客户端。看起来它在技术上是如何在同一页面上,我将在#之后使用参数来跟踪当前页面状态,同时防止回发。我的问题是我似乎无法用正则表达式行选择所有参数。当我在线使用测试工具时,分割的正则表达式工作,但当我在我的网页上使用它时,它不起作用。
//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] = ''
我认为这应该是一个已解决的问题,但我似乎无法找到答案。我想这导致了另一个问题。我是以完全错误的方式解决这个问题吗?
答案 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;
请注意,第一场比赛是&#34; main&#34; URL的一部分。后续匹配是参数值对。
答案 1 :(得分:0)
请尝试使用window.location.hash。它将返回哈希值(在您的示例网址中,它将是#edit&amp; e = 1),您可以使用字符串操作来执行任何操作。