字符串在javascript中用相同url的一部分替换url

时间:2018-01-04 21:16:31

标签: javascript regex

我有一个包含随机网址的字符串:

http://google.com/vocab/prefix#Billy

需要对其进行转换,以便将所有内容(包括第一个#)替换为上一个/和第一个#之间的值,后跟{{1 }}

结果将是:

:

更多例子:

prefix:Billy

我理解如何捕获前缀部分http://some.url/a/path#elephant --> path:elephant http://random.com/cool/black/beans/thing#Bob --> thing:bob ,但我正在努力进行字符串替换,因为我无法弄清楚如何捕获我需要替换的部分。

/([^\/]+(?=#))/

如果可能的话,我宁愿使用带有正则表达式的string.replace

2 个答案:

答案 0 :(得分:4)

使用replace方法时,您需要匹配要替换的所有模式,而不仅仅是您需要保留的部分;这有两个选择:



let s = 'http://google.com/vocab/prefix#Billy'

// using greedy regex
console.log(s.replace(/.*\/([^#]+)#/, '$1:'))

// adapted from OP's attempt
console.log(s.replace(/.*?([^\/]+?)#/, '$1:'))




注意.*部分匹配您要丢弃的子字符串,()捕获您想要保留的模式,然后重新格式化输出。

答案 1 :(得分:0)

试试这段代码:

var myString = "http://google.com/vocab/prefix#Billy";
var hashIndex = myString.indexOf("#"); // find where the "#" is

for(var i = hashIndex; i > 0; i--) { // loop from "#" index *back* to closest "/" symbol
  if(myString[i] == "/") break; // break loop when "/" is found
}

myString = myString.replace("#", ":"); // replace "#" with ":" as in your example

console.log(myString.substring(i, hashIndex); // output 

缩短:

var myString = "http://google.com/vocab/prefix#Billy".replace("#",":");
for(var i = myString.indexOf(":"); i > 0; i--) { if(myString[i] == "/") break; }
console.log(myString.substring(i, myString.indexOf(":");