下面这种正则是匹配/
后面的数字或=
号后面的参数
想问下下面的正则匹配性能
是否还有优化的空间
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 }
感觉写的挺乱的, 能说下实际需求吗 如果只是提取/=后面的话可以不用写的那么复杂
console.log('ldsijfoidsjfidsfsdf=239849hjf9ds8fu23j42093r/js0d9jf23386)'.match(/[/=][^=/]+\b/ig))
不怎么喜欢用 构造函数的 方式创建 正则表达式。
只说一个,如果你需要捕获的只是其中一个括号内的元素,那么可以将其他括号设置为不捕获。
这可以提升一点效率。
方法是在不捕获的元素括号内的 开头处加上 ?:
你的reg元素 翻译过来 是
/(^|\?|&|\/?)(\/|=)(\d+|[^&]*)(\?|&|$)/i
如果你的 ^$
是用来限定首尾元素的话,那我感觉你用错了,但那旁边的 | 符号又指什么?
有点搞不懂。
按你做的都没错的话那么,改善方式就是让 reg
等于下面这个
/(?:^|\?|&|\/?)(?:\/|=)(\d+|[^&]*)(?:\?|&|$)/i
然后
return unescape(r[1])
这样。