我首先知道这可能是有史以来最糟糕的正则表达式,但现在可以了。
我有这个正则表达式
(?:http://)?(?:www.)?youtu(?:be)?.(?:[a-z]){2,3}(?:[a-z/?=]+)([a-zA-Z0-9-_]{11})(?:[a-z0-9?&-_=]+)?
能够匹配任何这些
www.youtu.be/watch?v=QH2-TGUlwu4
http://www.youtube.com/watch?v=QH2-TGUlwu4&feature=related
http://youtu.be/QH2-TGUlwu4
http://www.youtube.com/embed/QH2-TGUlwu4
http://www.youtube.com/v/QH2-TGUlwu4?version=3&hl=en_US
它在javascript中所做的就是将它分开并只返回视频代码。
我想要发生的是,如果整个字符串以双引号或单引号开头,则返回零匹配。
“http://youtu.be/QH2-TGUlwu4
在这里,我失去了对自己所做的一切的感觉。我知道理论上的负面前瞻是什么,但我在网站的其他地方找到了这个,并且只是插入它认为它会解决问题。
如果我把这个^(?!\")
放在它之前,如果任何在字符串之前,它将返回零匹配。
帮助?
答案 0 :(得分:3)
摆脱^
。它将匹配限制在字符串的开头。
答案 1 :(得分:1)
如果只想在没有单引号或双引号作为第一个字符的情况下进行匹配,则需要像这样的字符类,^[^'\"]
这意味着限制为启动,而不是单引号或双引号。
我需要你澄清一下你是否想要更多关于如何接受某些事情的细节,你想要允许http://但不允许“http://?如果是这样,只需使用^ http强制字符串中的第一件事就是http。
允许发生任何事情的使用示例,除了单引号或双引号首字母:
^([^'\"].*)?http...
答案 2 :(得分:1)
正如Alex Gosselin所说,在你的正则表达式的开头加一个^
来强制它在字符串的开头开始匹配,使任何不匹配的东西都失败。
一些注意事项:
-
。如果它不是char类中的第一个/最后一个char,则需要将其转义。.
s。(?:[a-z])
是[a-z]
。(?:x+)?
是x*
。$
。导致类似:
^(?:http://)?(?:www\.)?youtu(?:be)?\.[a-z]{2,3}(?:[a-z/?=]+)([a-zA-Z0-9_-]{11})[a-z0-9?&_=-]*$