Javascript js RegEx条件替换为捕获的组
我正在尝试在javascript中使用正则表达式格式化url 输入:Javascript js RegEx条件替换为捕获的组,javascript,regex,Javascript,Regex,我正在尝试在javascript中使用正则表达式格式化url 输入:http://www.google.com或https://www.yahoo.com 我正在使用这个正则表达式来捕获/(http\:\/\/\124; https\:\/\/){0,1}(.*)/ 所以$1是说它是http还是https和$2url的其余部分 现在我想用1替换http,用2替换https,这样输出应该如下所示: 1www.google.com和2www.yahoo.com 我使用了下面的代码,但它不工作 var
http://www.google.com
或https://www.yahoo.com
我正在使用这个正则表达式来捕获/(http\:\/\/\124; https\:\/\/){0,1}(.*)/
所以$1
是说它是http
还是https
和$2
url的其余部分
现在我想用1
替换http
,用2
替换https
,这样输出应该如下所示:
1www.google.com
和2www.yahoo.com
我使用了下面的代码,但它不工作
var url = "http://www.microsoft.com";
url.replace(/(http\:\/\/|https\:\/\/){0,1}(.*)/, ("$1"=="http://"?"1":"2")+"$2");
// output: 2www.microsoft.com
url.replace(/(http\:\/\/|https\:\/\/){0,1}(.*)/, ("$1"=="http://")+"$2");
// output: falsewww.microsoft.com
有人知道怎么做吗。。。??谢谢…url.replace('https','2')。replace('http','1')
不知道为什么要这样做,尽管使用正则表达式的解决方案
var url1= 'http://www.google.com';
var url2= 'https://www.yahoo.com';
url1.replace(/(http\:\/\/|https\:\/\/){0,1}(.*)/, function (g1,g2,g3) {
var prefix ='';
if(g2 == 'https://') {
prefix = '2'
} else{
prefix='1'
}
return prefix + g3
})
//url1.replace(...) //"1www.google.com"
//url2.replace(...) //"2www.yahoo.com"
解释-replace函数如何与正则表达式一起工作
replace(<RegEx>, handler)
replace(,处理程序)
参数-$1、$2、$3。。。是正则表达式的结果。正则表达式模式中的每个捕获组都可以在替换字符串中使用$N表示法,其中“N”是捕获组的索引:
url.replace(/(http\:\/\/|https\:\/\/){0,1}(.*)/, ("$1"=="http://"?"1":"2")+"$2");
应该做到这一点,而不必引入lambda函数,并且对现有代码进行最小的修改。您的正则表达式的问题是,您捕获的是<代码>://< /COD>,而不是与此进行比较,并且<>代码“http://=”“http”将始终评估为false。ReExp您使用的不好:它可以在字符串的中间匹配HTTP,并且即使不需要,它也尝试匹配整个字符串。 用这个代替
url.replace(/^http(s)?:\/\//, function(match, secure) {
return secure ? "2" : "1"
})
谢谢你的回答。。。我的问题写错了。。。即使与
http://
进行比较,它也会显示false
…我希望使用regex的解决方案。。。所以当然应该有一个原因。。。我真正的问题更复杂,我想用一个正则表达式替换,而不是像你一样用15个替换…你回答了xecgr回答的同样的问题。。。你应该投更多的票。。。
url.replace(/^http(s)?:\/\//, function(match, secure) {
return secure ? "2" : "1"
})