【问题标题】:Javascript replace() and regexJavascript replace() 和正则表达式
【发布时间】:2012-11-03 17:21:07
【问题描述】:

我正在尝试使用 javascript 和正则表达式来替换 url 中的子字符串。

myurl.com/?page_id=2&paged=2 

会变成

myurl.com/?page_id=2&paged=3

这是我的代码,似乎不起作用:

nextLink = 'myurl.com/?page_id=2&paged=2'
nextLink = nextLink.replace(/\/paged\=\/[0-9]?/, 'paged='+ pageNum);

我在这里做错了什么?我是正则表达式的新手。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您告诉它匹配/paged,但您的字符串中没有/paged。此外,[0-9]? 可能不是您想要的数字。试试这个:

    nextLink.replace(/\&paged=[0-9]+/, 'paged=' + pageNum);
    

    这告诉它用给定的字符串替换&pageid=...(其中...是一系列一个或多个数字)。

    【讨论】:

    • +1,我会添加一个注释,说明需要转义什么样的字符。
    • 两个答案都像一个魅力,只是错过了第二个参数中的“&”。谢谢!
    【解决方案2】:

    您不需要转义=,并且您有一些额外的斜线可以匹配,这些斜线在您的示例网址中不存在。没有它们,它应该可以工作:

    nextLink = nextLink.replace(/[?&]paged=[0-9]?/, 'paged='+ pageNum);
    

    【讨论】:

      【解决方案3】:

      你的:

      nextLink = nextLink.replace(/\/paged\=\/[0-9]?/, 'paged='+ pageNum);
      

      我的:

      nextLink = nextLink.replace(/&paged=[0-9]?/, 'paged='+ pageNum);
      

      即当你的意思是&时,你写了\/。出于某种原因,您还把它写在了数字之前。而且你不需要逃避=。

      【讨论】:

        【解决方案4】:

        既然可以使用excellent URI.js library,为什么还要使用正则表达式?

        URI("myurl.com/?page_id=2&paged=2")
            .removeQuery("paged")  // remove so we don't have a duplicate
            .addQuery("paged", pageNum)
            .toString();
        

        你不用担心逃跑,URI.js 为你做一切。

        【讨论】:

          【解决方案5】:

          使用回调函数:

          var r = new RegExp("paged=(\\d+)");
          s = s.replace(r, function($1, $2){ return "paged=" + (parseInt($2, 10) + 1); });
          

          见this demo。

          【讨论】:

            【解决方案6】:

            斜线太多。 \/ 将尝试匹配不存在的文字斜线:

            nextLink = nextLink.replace(/paged=[0-9]?/, 'paged='+ pageNum);
            

            但是,我认为应该有更好的方法来解析和重新组装 Javascript 中的 URL。

            【讨论】:

              【解决方案7】:

              这是一个不使用正则表达式的解决方案。

              var url ="myurl.com/?page_id=2&paged=2" , pageNum=3;
              url = url.split("paged=")[0]+"paged="+pageNum;
              

              DEMO

              【讨论】:

                猜你喜欢
                • 2013-10-13
                • 1970-01-01
                • 2011-03-25
                • 2012-03-18
                • 1970-01-01
                • 1970-01-01
                • 2017-01-18
                • 1970-01-01
                • 2012-07-13
                相关资源
                最近更新 更多