删除位于特定字符串之间的字母

时间:2016-01-12 20:15:24

标签: javascript uri fragment-identifier

我想确保从window.location获取的网址尚未包含特定的片段标识符。如果是的话,我必须删除它。所以我必须搜索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);
}

知道该怎么做吗?

4 个答案:

答案 0 :(得分:5)

这样的东西?这使用正则表达式来过滤不需要的字符串。

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

答案 1 :(得分:4)

使用正则表达式:

var url = window.location;
var imgString = url.replace(/(#mp-[^#\s]+)/, "");

它会从mp-之前删除从#到字符的URL哈希值。

Regex101 demo

答案 2 :(得分:3)

您可以使用.replace替换与空字符串匹配的正则表达式(" #mp - "后跟0或更多非#个字符)。如果可能有多个要移除的细分,只需在正则表达式中添加g标记。

url = url.replace(/#mp-[^#]*/, '');

答案 3 :(得分:1)

window.location具有hash属性,因此... window.location.hash

最原始的方式是宣布

var char_start, char_end

找到两个“#”或一个,第二个将是输入结束。

有了...你可以做你想做的事,window.location.hash的更改通常会影响浏览器的地址。

祝你好运!