使用正则表达式简化javascript代码(获得指向iframes youtube的多个链接)
嗨 我有一个代码,可以显示youtube视频,如果有任何链接到youtube的文本 例如,有多个链接的文本 测试 示例如下: 这个问题有三个部分,可以使用正则表达式来完成 1>逐个获取URL以进行检查 2> 正在检查是否存在youtube URL 3> 正在将URL转换为youtube对象或iFrame 第二个和第三个几乎都是用正则表达式完成的。。欢迎任何改进 最麻烦的是代码的第一部分,它将使用正则表达式来完成 我正在将此文本转发到函数使用正则表达式简化javascript代码(获得指向iframes youtube的多个链接),javascript,regex,Javascript,Regex,嗨 我有一个代码,可以显示youtube视频,如果有任何链接到youtube的文本 例如,有多个链接的文本 测试 示例如下: 这个问题有三个部分,可以使用正则表达式来完成 1>逐个获取URL以进行检查 2> 正在检查是否存在youtube URL 3> 正在将URL转换为youtube对象或iFrame 第二个和第三个几乎都是用正则表达式完成的。。欢迎任何改进 最麻烦的是代码的第一部分,它将使用正则表达式来完成 我正在将此文本转发到函数 function to_youtubelink(
function to_youtubelink(text)
{
if ( text.indexOf ('<') > 0 || text.indexOf ('"') > 0 || text.indexOf ('>') > 0 )
return text;
else
{
var obj_text = new Array();
var oi = 0;
while(text.indexOf('http://') >=0)
{ //getting the paths
var si = text.indexOf('http://');
var gr = text.indexOf('\n', si);
var sp = text.indexOf(' ', si);
var ei;
if ( gr > 0 || sp > 0 )
{
if ( gr >0 && sp > 0 )
{
if ( gr < sp )
{
ei = gr ;
}
else
{
ei = sp ;
}
}
else if ( gr > 0)
{
ei = gr;
}
else
{
ei = sp;
}
}
else
{
ei = text.length;
}
var it = text.substring(si,ei);
if ( it.indexOf('"') > 0)
{
it.substring(0, it.indexOf('"') );
}
if(ei < 0)
ei = text.length;
else
ei = text.indexOf(' ', si) ;
obj_text[oi] = it;
text = text.replace( it, '[link_service]');
oi++;
}
var ob_text = new Array();
var ob =0;
for (oi=0; oi<obj_text.length; oi++)
{
if ( is_youtubelink( obj_text[oi] ) )
{
ob_text[ob] = to_utubelink(obj_text[oi]);
ob++;
}
}
oi = 0;
while ( text.indexOf('[link_service]') >=0 )
{
text = text.replace( '[link_service]', obj_text[oi]);
oi ++;
}
for (ob=0; ob<ob_text.length; ob++)
{
text = text +"\n\n" + ob_text[ob];
}
return text;
}
}
function is_youtubelink(text)
{
var matches = text.match(/http:\/\/(?:www\.)?youtube.*watch\?v=([a-zA-Z0-9\-_]+)/);
if (matches) {
return true;
} else {
return false;
}
}
function to_utubelink(text)
{
var video_id = text.split('v=')[1];
var ampersandPosition = video_id.indexOf('&');
if(ampersandPosition != -1)
{
video_id = video_id.substring(0, ampersandPosition);
}
text = "<iframe title=\"YouTube video player\" class=\"youtube-player\" type=\"text/html\" width=\"425\" height=\"350\" src=\"http://www.youtube.com/embed/" + video_id + "\" frameborder=\"0\"></iframe>"
return text;
}
函数到_youtubelink(文本)
{
如果(text.indexOf(“请尝试以下操作:
/**
* Extracts a youtube id from a string
*
* @param string
*
* @return mixed
*/
function youtubeIDextract(text) {
var replace = "$1";
if (!text.match(/http:\/\/www\.youtube[^"]+/))
return false;
if (text.match(/^[^v]+v.([^&^=^\/]{11}).*/))
return text.replace(/^[^v]+v.([^&^=^\/]{11}).*/,replace);
else if (text.match(/^[^v]+\?v=([^&^=^\/]{11}).*/))
return text.replace(/^[^v]+\?v=([^&^=^\/]{11}).*/,replace);
else
return false;
}
这里可以看到一个工作示例:
如果您只想检查某个地方是否有youtube链接,请执行以下操作:
if (youtubeIDextract(text)) {...}
请注意,这还会检查视频id中是否有11个字符(如果没有11个字符,它将是格式错误的youtube链接)。试试这个:
function to_youtubelink(a) {
if (a.indexOf("<") > 0 || a.indexOf('"') > 0 || a.indexOf(">") > 0) return a;
var b = Array(),
c = 0;
while (a.indexOf("http://") >= 0) {
var g, d = a.indexOf("http://"),
e = a.indexOf("\n", d),
f = a.indexOf(" ", d);
g = e > 0 || f > 0 ? e > 0 && f > 0 ? f > e ? e : f : e > 0 ? e : f : a.length;
var h = a.substring(d, g);
h.indexOf('"') > 0 && h.substring(0, h.indexOf('"')), g = 0 > g ? a.length : a.indexOf(" ", d), b[c] = h, a = a.replace(h, "[link_service]"), c++
}
var i = Array(),
j = 0;
for (c = 0; b.length > c; c++) is_youtubelink(b[c]) && (i[j] = to_utubelink(b[c]), j++);
c = 0;
while (a.indexOf("[link_service]") >= 0) a = a.replace("[link_service]", b[c]), c++;
for (j = 0; i.length > j; j++) a = a + "\n\n" + i[j];
return a
}
function is_youtubelink(a) {
var b = a.match(/http:\/\/(?:www\.)?youtube.*watch\?v=([a-zA-Z0-9\-_]+)/);
return b ? !0 : !1
}
function to_utubelink(a) {
var b = a.split("v=")[1],
c = b.indexOf("&");
return c != -1 && (b = b.substring(0, c)), a = '<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="350" src="http://www.youtube.com/embed/' + b + '" frameborder="0"></iframe>'
}
函数到_youtubelink(a){
if(a.indexOf(“我已经在函数“to_utubelink”(我代码的最后一个函数)中这么做了)…也许这是一个更好的实现…@Pradyut:等等,现在调整一下。我对正则表达式不太了解,但看看是否url来自youtube,在我的函数中有一个更宽的正则表达式”是“…谢谢…在链接中,你只有一个youtube链接…用我的文本运行多个youtube链接…不急顺便说一句:D@Pradyut:嗯,是的,它似乎不符合所有的情况。我正在努力解决这个问题。