javascript - 关于正则性能的问题

 mobiledu2502856653 发布于 2022-11-11 18:59

下面这种正则是匹配/后面的数字或=号后面的参数
想问下下面的正则匹配性能是否还有优化的空间

function getQueryString(name, source) {
    var reg    = new RegExp('(^|\\?|&|\\/?)' + name + '(\\/|=)(\\d+|[^&]*)(\\?|&|$)', 'i'),
        source = source || window.location.search,
        r      = source.match(reg)
    if (r != null) return unescape(r[3])
    return null
}
2 个回答
  • 感觉写的挺乱的, 能说下实际需求吗 如果只是提取/=后面的话可以不用写的那么复杂

        console.log('ldsijfoidsjfidsfsdf=239849hjf9ds8fu23j42093r/js0d9jf23386)'.match(/[/=][^=/]+\b/ig))
    
    2022-11-12 01:55 回答
  • 不怎么喜欢用 构造函数的 方式创建 正则表达式。

    只说一个,如果你需要捕获的只是其中一个括号内的元素,那么可以将其他括号设置为不捕获。
    这可以提升一点效率。
    方法是在不捕获的元素括号内的 开头处加上 ?:

    你的reg元素 翻译过来 是

    /(^|\?|&|\/?)(\/|=)(\d+|[^&]*)(\?|&|$)/i
    

    如果你的 ^$ 是用来限定首尾元素的话,那我感觉你用错了,但那旁边的 | 符号又指什么?
    有点搞不懂。

    按你做的都没错的话那么,改善方式就是让 reg 等于下面这个

    /(?:^|\?|&|\/?)(?:\/|=)(\d+|[^&]*)(?:\?|&|$)/i
    

    然后

    return unescape(r[1])
    

    这样。

    2022-11-12 01:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有