我想确保从window.location
获得的URL中没有包含特定的片段标识符。如果是,我必须删除它。所以我必须搜索URL,找到以mp-
开头并一直持续到结束URL或下一个#
的字符串(以防URL包含多个片段标识符)。
输入和输出示例:
www.site.com/#mp-1 --> www.site.com/
www.site.com#mp-1 --> www.site.com
www.site.com/#mp-1#pic --> www.site.com/#pic
我的代码:
(显然不能正常工作)
var url = window.location;
if(url.toLowerCase().indexOf("#mp-") >= 0){
var imgString = url.substring(url.indexOf('#mp-') + 4,url.indexOf('#'));
console.log(imgString);
}
知道怎么做吗?
类似的东西?这使用正则表达式来过滤不需要的字符串。
var inputs = [
"www.site.com/#mp-1",
"www.site.com#mp-1",
"www.site.com/#mp-1#pic"
];
inputs = inputs.map(function(input) {
return input.replace(/#mp-1?/, '');
});
console.log(inputs);
输出:
["www.site.com/", "www.site.com", "www.site.com/#pic"]
jsfiddle:https://jsfiddle.net/tghuye75/
我使用的正则表达式/#mp-1?/
会删除任何类似#mp-
或#mp-1
的字符串。对于在下一个标签之前长度未知的字符串,可以使用/#mp-[^#]*
来删除#mp-
、#mp-1
和#mp-somelongstring
。
使用正则表达式:
var url = window.location;
var imgString = url.replace(/(#mp-[^#s]+)/, "");
它从URL散列中删除从mp-
到#
之前的字符的任何内容。
Regex101演示
您可以使用.replace
将匹配的正则表达式("#mp-"后跟0个或多个非#
字符)替换为空字符串。如果可能有多个段要删除,只需在正则表达式中添加g
标志即可。
url = url.replace(/#mp-[^#]*/, '');
window.location具有hash属性,因此…window.location.hash
最原始的方法是声明
var char_start, char_end
找到两个"#"或一个,第二个将是输入的末尾。
有了这个。。。你可以随心所欲,window.location.hash的更改通常会影响浏览器地址。
祝你好运!