我有一个包含随机网址的字符串:
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
答案 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(":");