Javascript正则表达式不';我不能在我的网站上得到验证,但它在验证器上得到验证
我简直是头撞到墙上了。 我有这个正则表达式模式Javascript正则表达式不';我不能在我的网站上得到验证,但它在验证器上得到验证,javascript,regex,Javascript,Regex,我简直是头撞到墙上了。 我有这个正则表达式模式 (?:youtu\.be\/|youtube.com\/(?:watch\?.*\bv=|embed\/|v\/)|ytimg\.com\/vi\/)(.+?)(?:[^-a-zA-Z0-9]|$) 提取youtube视频的id。我在这里试过 假设使用任何主题字符串,它都可以工作 但是在我的站点上,我有以下输入字段 <input type="text" name="status" id="status" placeholder="Post
(?:youtu\.be\/|youtube.com\/(?:watch\?.*\bv=|embed\/|v\/)|ytimg\.com\/vi\/)(.+?)(?:[^-a-zA-Z0-9]|$)
提取youtube视频的id。我在这里试过
假设使用任何主题字符串,它都可以工作
但是在我的站点上,我有以下输入字段
<input type="text" name="status" id="status" placeholder="Post a youtube video link">
使用与上面相同的视频,结果是“不匹配”。
这怎么可能,请告诉我这里出了什么问题。使用正则表达式文字:
var re = /(?:youtu\.be\/|youtube.com\/(?:watch\?.*\bv=|embed\/|v\/)|ytimg\.com\/vi\/)(.+?)(?:[^-a-zA-Z0-9]|$)/;
发生的情况是字符串已经“求值”转义,因此您的\.
和\b
将变成
和退格字符new RegExp
在大多数情况下使用的函数都是错误的,并且只有在使用动态正则表达式时才真正有用(大多数情况下也是错误的)-正则表达式文本更高效、更易于读取,因此不易出错
(另外,
youtube.com
应该是youtube\.com
)是的,这确实有效,是的,出于某种原因,我忽略了youtube之后的点,但是你能解释一下为什么它在验证程序站点上工作而不是在本地工作,尽管它使用了相同的代码吗?@Systemfreak:他确实解释过,而且代码也不完全相同。您的\。
序列在放入字符串时被解释为转义序列。您需要转义每个\
字符<代码>变量模式=“(?:youtu\\.be\\/…”@Systemfreak:你的意思是因为验证器站点使用了new RegExp
?问题不在new RegExp
本身,而是在字符串中。当你在文本框中键入一个字符串,脚本得到它的值时,没有任何变化。但是字符串文本中引号之间的内容不一定与其值匹配,因为字符串具有使用\
的转义序列。
var re = /(?:youtu\.be\/|youtube.com\/(?:watch\?.*\bv=|embed\/|v\/)|ytimg\.com\/vi\/)(.+?)(?:[^-a-zA-Z0-9]|$)/;