Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拆分window.location on/and join with:if结束于/don';t加上:_Javascript_Jquery_Regex_Indexof_Window.location - Fatal编程技术网

Javascript 拆分window.location on/and join with:if结束于/don';t加上:

Javascript 拆分window.location on/and join with:if结束于/don';t加上:,javascript,jquery,regex,indexof,window.location,Javascript,Jquery,Regex,Indexof,Window.location,我试图编写一个if语句来查看URL,并根据它执行某些代码块。我遇到的问题是在url以/结尾时查找,而不是添加:。例如www.site.com/folder/page/=folder:page:I-want folder:page var winLoc = window.location.href if(winLoc.indexOf('error') > -1){ winLoc = 'Error:' + document.referrer.replace(/^.+.com/,'').spli

我试图编写一个if语句来查看URL,并根据它执行某些代码块。我遇到的问题是在url以/结尾时查找,而不是添加:。例如www.site.com/folder/page/=folder:page:I-want folder:page

var winLoc = window.location.href
if(winLoc.indexOf('error') > -1){
winLoc = 'Error:' + document.referrer.replace(/^.+.com/,'').split('/').join(':')
}
else{
winLoc.replace(/^.+.com/,'').split('/').join(':')
}

另外,我不是正则表达式的人,所以答案的解释如下:

您可以使用以下内容:

winLoc = 'Error:' + document.referrer.replace(/^.+\.com\/([^\/]+)\/([^\/]+)\/?/,'$1:$2')
请参见

.replace(/:$/,'')
最后。这很简单,直观,显而易见,所以我想它是“最好”的选择之一。我想您也忘了将结果分配给
winLoc

实际上,我建议减少代码重复,如下所示:

var winLoc=(~location.href.indexOf('error')
  ? 'Error:'+document.referrer
  : location.href)
    .replace(/^(Error:)?.+\.com/,'$1') // Remove URL but keep optional “Error:”
    .replace(/(?:\/)/g,':')
    .replace(/:$/,'');
请注意,必须转义
com
之前的
\.

无论如何,如果还想排除起始冒号,也可以编写
/
..
\.com(?:\/)/
而不是
/
..
\.com/
(?:)
只是非捕获组(即没有特殊意义的组),阻止JS将某些部分解释为注释(
/

测试代码段:
document.getElementById('tester').addEventListener('change',function(){
document.getElementById('out')。value=separateURLByColons(
document.getElementById('in1')。值,
document.getElementById('in2').value);
});
document.getElementById('out')。value=separateURLByColons(
document.getElementById('in1')。值,
document.getElementById('in2').value);
函数分隔符(输入、回退引用){
变量位置\u href=输入,
文件\参考者=后备参考者;
var winLoc=(~location_href.indexOf('error'))
?“错误:”+文档\u引用者
:位置(U href)
.replace(//^(错误:)?。+\.com/,“$1”)//删除URL,但保留可选的“错误:”
.替换(/(?:\/)/g,,:')
.替换(/:$/,'');
返回winLoc;
}

location.href:
文档。推荐人:

结果:
同样,这是否“更好”值得怀疑,但它应该能够处理您试图做的事情:

var winLoc = window.location;

if (winLoc.href.indexOf('error') < -1) {
    winLoc = 'Error:' + document.referrer.replace(/^.+:\/+[^\/]+\//, "").match(/([^\/]+)/g).join(":");
}
else {
    winLoc = winLoc.pathname.match(/([^\/]+)/g).join(":");
}
var winLoc=window.location;
if(winLoc.href.indexOf('error')<-1){
winLoc='Error:'+document.referer.replace(/^.+:\/+[^\/]+\/,“”)。match(/([^\/]+)/g)。join(“:”);
}
否则{
winLoc=winLoc.pathname.match(/([^\/]+)/g);
}
遗憾的是,
document.referer
是一个
String
而不是
URLUtils
类型,因此您必须手动剥离文件类型和域(即,
.replace(/^.+:\/+[^\/]+\/,“”)

该正则表达式匹配字符串的开头(
^
),后跟一个或多个字符(
+
),后跟冒号(
),后跟一个或多个斜杠(
\/+
…注意,斜杠被转义),后跟一个或多个非斜杠字符(
[^\/]+
),后跟一个斜杠(
\/
)。这将匹配多个资源类型(“http”、“https”、“文件”等)以及多个域类型(“.com”、“.org”、“biz”等)

但是,
windows.location
是一个来自
URLUtils
的对象,因此您可以简单地引用
pathname
属性来获取域(主机名
属性)和任何参数(搜索
URLUtils
属性)之间的所有内容。有关
URLUtils
的更多信息,请参见此处:

在这两种情况下,
“www.site.com/folder/page/”
最终变成了
“folder/page/”

获取目录字符串后,您可以应用单个regex
match
,它将返回与您提供的regex模式匹配的所有值。在这种情况下,即
/([^\/]+)/g
…这意味着“一个或多个非斜杠字符的任何连续组”。并且,模式末尾的
g
标志意味着代码应该捕获所有这些目录级别

“文件夹/页面/”
变为
[“文件夹”,“页面”]

所有这些元素都将在一个数组中返回,因此您只需将
数组元素连接在一起,就可以得到字符串

[“文件夹”、“页面”]
变为
“文件夹:页面”


现在,有一些警告…一些网站在其搜索URL末尾使用了一些非常奇怪的值,这可能会导致意外的结果(例如,查看雅虎重定向),如果URL中有一个页面(例如,“blah/blah/blah/page.html”),那么该页面也将包含在结果中


进一步的调整可以消除这些,但是,因为这不是你的问题的一部分,我没有走这条路。

简单地在最后放一个
.replace(/:$/,'')
?而且,
.com
应该是
\.com
@Xufox足够简单-谢谢。有更好的方法吗?这是最好的方法吗?你可以做
winLoc.replace(/^+.com/,‘’)。分裂('/')。过滤器(布尔)。连接('/');< /代码>,但我不认为它一定是“更好”。“RooksRIFE发布了一个答案(可能过于复杂……)。希望,我把一切都解释清楚了。是的,我会认为它是“最好的”。option.Boom是炸药——我认为必须有更好的方法通过正则表达式,而不是替换、拆分、加入、替换。等一下,这是否超出了两个级别…www.site.com/folder/folder/folder/page/?这里需要什么?