正则表达式 - 仅匹配字符串的一部分

时间:2016-05-24 15:10:07

标签: javascript regex

它是练习的一部分,任务是:

  1. 如果第一个arg只是url,那么返回url +第二个arg(这是一个id号)//在我的代码中工作
  2. 如果第一个arg(url)已包含id-then,那么Id与第二个arg(Id) - 例如http://www.google.com?ID=111变为http://www.google.com?ID=222
  3. 我的代码错了,对建议感到高兴!

    var first = "http://www.google.com?ID=111";
    var second = "ID=222";
    
    function searching(){
        var update="";
        if (arguments[0]==/^\w+@\w+\.com$/i){
            return arguments[0]+"?"+arguments[1];
        }
        else {
            update=arguments[0].match(/(\w+@\w+\.com) \?\w+\d/i);
        }
        return update + "?" +arguments[1]; 
    }
    
    searching(first, second);
    

2 个答案:

答案 0 :(得分:1)

您不能只将字符串与正则表达式与==进行比较。基本上你的选择是match, test, replace, and split。当你想要一个\w时,你的正则表达式有一个w,应该是:/www\.\w+\.com$/i - 我只是进一步缩短它。在javascript中testing for valid URL时,有一百万种正则表达式验证。一般来说,我认为,你应该为你的用例构建一个“足够好”的正则表达式:这里我们只关心查询参数是否存在:

var first = "http://www.google.com?ID=111";
var second = "ID=222";
function searching(){
    var update="";
    if (/^.*\.com$/i.test(arguments[0])){ 
        //pattern just checks end of string to see if query param is present.
        return arguments[0]+"?"+arguments[1];
    }
    else {
        update=arguments[0].replace(/ID=\d+/, second); //
    }
    return update;
}
searching(first, second);

答案 1 :(得分:0)

您可以检查?以及第一个参数是否包含符号'?'然后使用.split('?')[0]获取第一部分(url)并添加第二个参数arguments[1],否则只需将第二个参数直接添加到第一个参数(url):

function searching()
{
    if (arguments[0].indexOf('?')!=-1)
        return arguments[0].split('?')[0]+"?"+arguments[1];
    else 
        return arguments[0]+"?"+arguments[1];
}

希望这有帮助。