我正在尝试使用javascript中的正则表达式格式化网址...
输入:http://www.google.com
或https://www.yahoo.com
我正在使用此正则表达式捕获/(http\:\/\/|https\:\/\/){0,1}(.*)/
所以$1
说的是http
或https
和$2
其他网址...
现在,我想将http
替换为1
,将https
替换为2
,以便输出如下所示:
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
有人知道怎么做......?感谢...
答案 0 :(得分:8)
使用正则表达式的解决方案
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"
答案 1 :(得分:1)
regexp你正在使用isn不好:它可以匹配字符串中间的http,它会尝试匹配整个字符串,即使它不需要
使用此代替
url.replace(/^http(s)?:\/\//, function(match, secure) {
return secure ? "2" : "1"
})
答案 2 :(得分:0)
url.replace('https','2').replace('http','1')
不知道你为什么要这样做
答案 3 :(得分:0)
url.replace(/(http\:\/\/|https\:\/\/){0,1}(.*)/,function($1, $2, $3) {
if($2 == 'https://') {
return "2" + $3
} else {
return "1" + $3
}
});
说明 - 替换函数如何与RegEx一起使用
replace(<RegEx>, handler)
参数 - $ 1,$ 2,$ 3 ......是RegEx的结果。正则表达式模式中的每个捕获组都可以使用$ N表示法在替换字符串中使用,其中“N”是捕获组的索引:
答案 4 :(得分:0)
url.replace(/(http\:\/\/|https\:\/\/){0,1}(.*)/, ("$1"=="http://"?"1":"2")+"$2");
应该可以完成这一操作,而无需引入lambda函数并对现有代码进行最少的修改。您的正则表达式的问题在于您捕获://
而不是与之进行比较,而"http://" == "http"
将始终评估为false。