为了账号安全,请及时绑定邮箱和手机立即绑定

关于正则性能的问题

关于正则性能的问题

智慧大石 2018-08-10 10:09:44
下面这种正则是匹配/后面的数字或=号后面的参数想问下下面的正则匹配性能是否还有优化的空间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}
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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

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

你的reg元素 翻译过来 是

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

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

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

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

然后

return unescape(r[1])

这样。


查看完整回答
反对 回复 2018-09-23
  • 1 回答
  • 0 关注
  • 758 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信