Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript js RegEx条件替换为捕获的组_Javascript_Regex - Fatal编程技术网

Javascript js RegEx条件替换为捕获的组

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

我正在尝试在javascript中使用正则表达式格式化url

输入:
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"
})