是的,我知道标题与之前提出的许多问题相似,但我在网站上花了很多时间才发布我的问题:
这是字符串:
http://youtu.be/-joKveiaabA <br>
这是我的正则表达式:
var re = /(?:http?s?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+).*?(?=<br>|$)/g,
它与一个&lt; br&gt;但不想与多个&lt; br&gt;'...例如它不能正确解析这样的行:
https://www.youtube.com/watch?v=QoQ_dHCi-08 <br><br>
代码应该是这样的: “将所有字符复制到”&lt; br&gt;“并停止”
最终解决方案: 我有点“改进”蒂姆的接受答案。这是小提琴: http://jsfiddle.net/RfnXu/64/ 现在,URL被复制到一个左括号,以便之后可以有任何内容( div,br,span,img。 ..)
非常感谢,再一次!!雅虎!
答案 0 :(得分:3)
在懒惰之前你有一个贪婪的量词,并且它们都是非特定的:(.+).*?
。不好。由于URL不能包含空格,请尝试以下操作:
var re = /(?:http?s?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?([^\s<>]+)\s*(?=<br>|$)/g
([^\s<>]+)
将匹配一个或多个非空格字符,除非它们是尖括号。然后,\s*
将在最终检查尾随<br>
标记或字符串结尾之前匹配任意数量的空白字符。