正则表达式 - 将所有内容复制到某个模式

时间:2017-03-09 06:08:24

标签: regex

是的,我知道标题与之前提出的许多问题相似,但我在网站上花了很多时间才发布我的问题:

这是字符串:

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。 ..)

非常感谢,再一次!!雅虎!

1 个答案:

答案 0 :(得分:3)

在懒惰之前你有一个贪婪的量词,并且它们都是非特定的:(.+).*?。不好。由于URL不能包含空格,请尝试以下操作:

var re = /(?:http?s?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?([^\s<>]+)\s*(?=<br>|$)/g

([^\s<>]+)将匹配一个或多个非空格字符,除非它们是尖括号。然后,\s*将在最终检查尾随<br>标记或字符串结尾之前匹配任意数量的空白字符。