javascript - 关于正则性能的问题
阿神
阿神 2017-04-11 11:48:49
[JavaScript讨论组]

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

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)
ringa_lee

不怎么喜欢用 构造函数的 方式创建 正则表达式。

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

你的reg元素 翻译过来 是

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

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

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

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

然后

return unescape(r[1])

这样。

PHP中文网

感觉写的挺乱的, 能说下实际需求吗 如果只是提取/=后面的话可以不用写的那么复杂

    console.log('ldsijfoidsjfidsfsdf=239849hjf9ds8fu23j42093r/js0d9jf23386)'.match(/[/=][^=/]+\b/ig))
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号