Javascript正则表达式匹配字符串,除非字符串以“

时间:2011-07-13 21:50:23

标签: javascript regex

我首先知道这可能是有史以来最糟糕的正则表达式,但现在可以了。

我有这个正则表达式

(?: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

在这里,我失去了对自己所做的一切的感觉。我知道理论上的负面前瞻是什么,但我在网站的其他地方找到了这个,并且只是插入它认为它会解决问题。

如果我把这个^(?!\")放在它之前,如果任何在字符串之前,它将返回零匹配。

帮助?

3 个答案:

答案 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?&_=-]*$
相关问题