js RegEx条件替换为捕获的组

时间:2014-07-02 16:55:37

标签: javascript regex

我正在尝试使用javascript中的正则表达式格式化网址...

输入:http://www.google.comhttps://www.yahoo.com

我正在使用此正则表达式捕获/(http\:\/\/|https\:\/\/){0,1}(.*)/

所以$1说的是httphttps$2其他网址...

现在,我想将http替换为1,将https替换为2,以便输出如下所示:

1www.google.com2www.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

有人知道怎么做......?感谢...

5 个答案:

答案 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。