url = (url.match(/^([^#]+)/)||[])[1];
url 是取的form中的action,如果form中的action不存在,则去取window.location.href
这段正则是匹配什么?
(url.match(正则)||[])[1]
如果url匹配上了.则是什么?如果没匹配上[][1]怎么解释 ?
url = (url.match(/^([^#]+)/)||[])[1];
url 是取的form中的action,如果form中的action不存在,则去取window.location.href
这段正则是匹配什么?
(url.match(正则)||[])[1]
如果url匹配上了.则是什么?如果没匹配上[][1]怎么解释 ?
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
这里涉及
match
方法的一个细节,当正则表达式设置了全局检索标识g
,若在字符串中匹配到,返回是一个包含了所有匹配项的数组:如果没有这个全局检索标识,只会检索第一个匹配,但是返回的仍旧是个数组,数组第一项是匹配结果,其后的数组项则是正则中各个分组表达式(你看到正则表达式中的括号)的匹配结果
这样你访问
a[1]
就是第一个分组表达式(a)
的匹配结果,类似的a[2]
就是第二个分组表达式(z)
的结果,以此类推,a[n]
对应第n个分组表达式匹配的值。然后,回到你的问题,这个表达式匹配:从起始位置开始,除'#'外的所有字符
这里没有设置全局检索标识,所以只会检索第一个匹配,然后就是分组表达式的匹配,数组第二项就是
(/[^#]+/)
这个分组表达式的匹配结果如果没有匹配到,
match
返回null
,[][1]
如你所见,undefined
可能有同学会纳闷为什是这样的实现?
如果你知道replace方法中基于分组替换的实现:
其中,
$n
分别对应第n个分组表达式的匹配结果,用法和match
非常相似