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

Removing a letters located between to specific string

我想确保从 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 url = window.location;
var imgString = url.replace(/(#mp-[^#\s]+)/, "");

它从 URL 中删除从 mp-# 之前的字符的所有内容。

Regex101 demo

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

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.

您可以使用 .replace 将正则表达式匹配(“#mp-”后跟 0 个或多个非 # 字符)替换为空字符串。如果可能有多个要删除的段,只需将 g 标志添加到正则表达式即可。

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

window.location 有散列 属性 所以... window.location.hash

最原始的方式是声明

var char_start, char_end

并找到两个“#”或一个和第二个将是输入的结尾。

有了那个...你可以做你想做的,window.location.hash 的变化通常会影响浏览器地址。

祝你好运!