Closed gggccc44 closed 6 years ago
或许是因为替换后的URL仍然符合https://www.youtube.com/api/timedtext\?(.*)
这条正则?
是的,所以导致无限重定向了。
可以这么做:
youtube.com/api/timedtext\?(.*)[^(?:tlang=zh\-Hans)]$
youtube.com/api/timedtext?$11&tlang=zh-Hans
注意,这里用的是 $11
,正则表达式好像有些问题:
var y = new RegExp("www.youtube.com/api/timedtext\\?(.*)[^(?:tlang=zh\\-Hans)]$")
var s = 'https://www.youtube.com/api/timedtext?hl=en_US&v=lkh4hjyHdWA&caps=asr&signature=7DD9C69C7A8B1CAB0A7A726B864E871D301C151E.D194FCAEFFFCDBC60E759E493ED83BAABDFE1066&asr_langs=it%2Cko%2Cde%2Cja%2Cen%2Cfr%2Cpt%2Cru%2Ces%2Cnl&expire=1500221134&key=yttt1&sparams=asr_langs%2Ccaps%2Cv%2Cexpire&kind=asr&lang=en&fmt=srv1'
console.log(y.exec(s))
输出
[ 'www.youtube.com/api/timedtext?hl=en_US&v=lkh4hjyHdWA&caps=asr&signature=7DD9C69C7A8B1CAB0A7A726B864E871D301C151E.D194FCAEFFFCDBC60E759E493ED83BAABDFE1066&asr_langs=it%2Cko%2Cde%2Cja%2Cen%2Cfr%2Cpt%2Cru%2Ces%2Cnl&expire=1500221134&key=yttt1&sparams=asr_langs%2Ccaps%2Cv%2Cexpire&kind=asr&lang=en&fmt=srv1',
'hl=en_US&v=lkh4hjyHdWA&caps=asr&signature=7DD9C69C7A8B1CAB0A7A726B864E871D301C151E.D194FCAEFFFCDBC60E759E493ED83BAABDFE1066&asr_langs=it%2Cko%2Cde%2Cja%2Cen%2Cfr%2Cpt%2Cru%2Ces%2Cnl&expire=1500221134&key=yttt1&sparams=asr_langs%2Ccaps%2Cv%2Cexpire&kind=asr&lang=en&fmt=srv',
index: 8,
input: 'https://www.youtube.com/api/timedtext?hl=en_US&v=lkh4hjyHdWA&caps=asr&signature=7DD9C69C7A8B1CAB0A7A726B864E871D301C151E.D194FCAEFFFCDBC60E759E493ED83BAABDFE1066&asr_langs=it%2Cko%2Cde%2Cja%2Cen%2Cfr%2Cpt%2Cru%2Ces%2Cnl&expire=1500221134&key=yttt1&sparams=asr_langs%2Ccaps%2Cv%2Cexpire&kind=asr&lang=en&fmt=srv1' ]
可以看到,输出的 group[1] 最后是 srv
,不是 srv1
,还不知道原因, 在 StackOverflow 上提了个问题
[^(?:tlang=zh\\-Hans)]
这显然是错误用法
我最初的想法是使用零宽断言,然而^(.*)(?!a)$
仍然能成功匹配111111111a
有那么明显嘛? 只是不知道 [^] 里面不能用 group 而已。 😳
有个 trick 的办法,判断 url 最后一个是不是 Hans 结尾:
youtube.com/api/timedtext\?(.*)([^H][^a][^n][^s])$
youtube.com/api/timedtext?$1$2&tlang=zh-Hans
@1354092549 你说的方式我也试过,主要是*
是 greedy 的,所以会尽可能多的匹配。
起因是这个帖子https://www.zhihu.com/question/37871481,让有土鳖直接显示中文字幕,但是火狐上的重定向工具没有Owl-redirector这种(我估计又也说不定存在gooreplacer这个bug),然后弄了个重定向规则
在谷歌内核浏览器用gooreplacer测试能正常使用,但是在火狐上不行,研究了半天发现gooreplacer貌似会对XHR这种注入不停重复执行重定向
以上