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…
非常有效,但前提是引用之前没有任何内容。