Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式匹配字符串,除非字符串以“开始”;_Javascript_Regex - Fatal编程技术网

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

Javascript正则表达式匹配字符串,除非字符串以“开始”;,javascript,regex,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=relate

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

我有这个正则表达式

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

在这里,我对自己正在做的事情失去了所有的感觉。理论上,我知道什么是负面展望,但我在网站的其他地方发现了它,并将其插入,以为它会解决问题

如果我把这个
^(?!\”
放在它前面,如果字符串前面有任何内容,它将返回零匹配


帮助?

摆脱
^
。它将匹配限制到字符串的开头。

去掉
^
。它将匹配约束到字符串的开头。

如果只想在第一个字符没有单引号或双引号时匹配,则需要这样的字符类,
^[^'\“]
它意味着约束开始,而不是单引号或双引号

我需要你澄清一下,如果你想要更多关于如何接受某些东西的细节,你想允许http://但不允许“http://”吗?如果是这样,只需使用^http强制字符串中的第一个内容为http

除了单引号或双引号首字母外,允许出现任何内容的使用示例:

^([^'\"].*)?http...

如果只想在第一个字符没有单引号或双引号的情况下进行匹配,则需要这样的字符类,
^[^'\“]
它意味着约束为开始,而不是单引号或双引号

我需要你澄清一下,如果你想要更多关于如何接受某些东西的细节,你想允许http://但不允许“http://”吗?如果是这样,只需使用^http强制字符串中的第一个内容为http

除了单引号或双引号首字母外,允许出现任何内容的使用示例:

^([^'\"].*)?http...

正如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?&_=-]*$

正如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?&_=-]*$

为什么不直接使用
([a-zA-Z0-9-{11})
来获取视频代码?当
以字符串形式出现时,你能给出一个例子吗?”这个问题用否定的前瞻来回答。唯一的问题是一个bug(使用
^
而没有意识到它的作用),正如Matti的回答所指出的。只需在原始正则表达式的开头添加一个^,强制它匹配http或www或youtu作为字符串的开头。为什么不使用
([a-zA-Z0-9-{11})来获取视频代码呢?当
以字符串形式出现时,你能给出一个例子吗?”这个问题用否定的前瞻来回答。唯一的问题是一个bug(使用
^
而没有意识到它的作用),正如Matti的回答所指出的。只需在原始正则表达式的开头添加一个^,强制它匹配http或www或youtu作为字符串的开头。我还应该提到,我从一个文本块中提取它,就像论坛帖子一样。
^([^'\“].*)http…
非常有效,但前提是在引用之前没有任何内容。我还应该提到的是,我从一块文本中提取这篇文章,很像一篇论坛帖子。
^([^'\“].*)http…
非常有效,但前提是引用之前没有任何内容。