【发布时间】:2020-03-12 09:47:43
【问题描述】:
拥有下面的 url 和 js 正则表达式,我希望能捕捉到 f2fJsDFJ23,但非贪婪部分 .*? 和 \?? 不能按预期工作
原因是什么?
let t = 'https://www.youtube.com/embed/f2fJsDFJ23?autoplay=1'
let reg = /(?:embed\/)(.*?)(?:\??)/.exec(t)
document.write(`6>>> ${reg && reg.join(' | ')} <br/>`)
reg = /(?:embed\/)(.*)(?:\??)/.exec(t)
document.write(`6>>> ${reg && reg.join(' | ')} <br/>`)
reg = /(?:embed\/)(.*)(?:\?)/.exec(t)
document.write(`6>>> ${reg && reg.join(' | ')} <br/>`)
t = 'https://www.youtube.com/embed/f2fJsDFJ23'
reg = /(?:embed\/)(.*?)(?:\??)/.exec(t)
document.write(`6>>> ${reg && reg.join(' | ')} <br/>`)
reg = /(?:embed\/)(.*)(?:\??)/.exec(t)
document.write(`6>>> ${reg && reg.join(' | ')} <br/>`)
reg = /(?:embed\/)(.*)(?:\?)/.exec(t)
document.write(`6>>> ${reg && reg.join(' | ')} <br/>`)
【问题讨论】:
-
你的意思是这样吗? regex101.com/r/DgB5XU/1
?是可选的,并且在它之后没有任何内容供模式匹配,因此非贪婪将满足尽可能少的匹配。您可以改为匹配?或断言字符串的结尾。 -
好的,我认为
?也可能意味着 0 个匹配项,但事实并非如此,所以我可以使用 OR 运算符,非常棒:) 非常感谢! (如果您在答案中写下相同的答案,我将关闭此)
标签: javascript regex regex-greedy non-greedy