simplfy javascript code using regex
- by Pradyut Bhattacharya
Hi
I have a code which can show youtube videos if there are any links to youtube in the text
like for example the text
example at:- pradyut.dyndns.org
http://www.youtube.com/watch?v=-LiPMxFBLZY
testing
http://www.youtube.com/watch?v=Q3-l22b_Qg8&feature=related
this text i m forwarding to the function...
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;
}
now i m getting the output properly...
but i was thinking if the code could be done better and simplified using regex
...especially getting the urls part...
thanks