开发者社区> 问答> 正文

javascript正则表达式替换疑问

这是正则表达式模式:reg = /(1)orderby2+(=3*)?/g

这是url:http://localhost/list.json?orderby=username

为什么 我 url.replace(reg, "$1orderby=logintime") 出来的结果是:

http://localhost/list.json?orderby=logintimeusername

也就是说 正则表达式模式中 红色那部分没有被替换掉


  1. a-zd_-
  2. a-zd_-
  3. &

展开
收起
a123456678 2016-07-15 15:56:38 2080 0
1 条回答
写回答
取消 提交回答
  • 尽管JS的正则是贪婪模式的,但无法命中的部分还是会在替换中活下来。看需求,你需要的是全匹配,正则需要写成 从^开始,到$结束的完全命中形式。

    举个例子:
    'aaa111bbb222ccc333'.replace(/bbb([d]+)/g,'got$1');
    它会命中bbb222,并替换掉,没有命中的aaa111和ccc333还是留着

    'aaa111bbb222ccc333'.replace(/bbb([d]+)/g,'got$1');
    "aaa111got222ccc333"

    但是这样写
    'aaa111bbb222ccc333'.replace(/^.bbb([d]+).$/g,'got$1');
    看到了吗,前后都有.*,把整个串都命中了。就只留下了got$1

    'aaa111bbb222ccc333'.replace(/^.bbb([d]+).$/g,'got$1');

    "got222"

    2019-07-17 19:57:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载