2013-05-13 12 views
5

I'm trying to use JQuery to achieve the following logic:Sostituisci i tag [url] con <a href> tags in Javascript/JQuery

  • Replace the string value of [url="http://www.google.com"]Google[/url] with <a href="http://www.google.com">Google</a>

Please see my HTML page below. The problem is that on pressing the button, the orignal text is just pasted and no RegEx replacements are made.

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Test</title> 
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
     //<![CDATA[ 
     function processJs() { 
      var oldtext = $("#oldtext").html(); 
      var newtext = oldtext.replace('\[url\s?=\s?"?(.*?)"?\](.*?)\[\/url\]', '<a href="$1">$2</a>'); 
      $('#mydiv').html(newtext); 
     } 
     //]]> 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div id="oldtext"> 
      Try this funky new search engine: 
      [url="http://www.google.com"]Google[/url] 
      Or this older one from back in the day: 
      [url="http://uk.altavista.com"]AltaVista[/url] 
     </div> 
     <div> 
      <input type="button" id="btn" value="Replace" onclick="processJs(); return false;" /> 
     </div> 
     <div id="mydiv" style="background-color: #eeeeee; border: 2px inset #aaaaaa"> 
      Replaced text will go here. 
     </div> 
    </form> 
</body> 
</html> 

I've had this RegEx pattern work using ASP.NET, so I'm not sure where the problem lies when ported to JavaScript...

risposta

5

That is not a valid regex. Use / as modifiers:

/\[url\s?=\s?"?(.*?)"?\](.*?)\[\/url\]/ 

making the function:

function processJs() { 
    var oldtext = $("#oldtext").html(); 
    var newtext = oldtext.replace(/\[url\s?=\s?"?(.*?)"?\](.*?)\[\/url\]/g, '<a href="$1">$2</a>'); 
    $('#mydiv').html(newtext); 
} 

g at the end will repeat it over the text. Here is a fiddle: http://jsfiddle.net/xe2F9/

+0

Stunning. Ho risposto così velocemente che StackOverflow non mi ha nemmeno permesso di accettarlo per altri 7 minuti :-D – EvilDr

4
var newtext = oldtext.replace(/\[url\s?=\s?"?(.*?)"?\](.*?)\[\/url\]/g, '<a href="$1">$2</a>'); 

Si specifica la 'ricerca' come un oggetto RegEx - non una stringa.

Basta usare /.../ per crearne uno in modo trasparente.

+1

Qual è il trailing/g per favore? – EvilDr

+1

@EvilDr significa corrispondere a tutti (questo è JS specifico) – HamZa

+1

'cos si desidera sostituire tutte le corrispondenze, non solo il primo. – barryhunter

Problemi correlati