2013-05-13 10 views
5

I'm trying to use JQuery to achieve the following logic:Wymień [URL] tagi z <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...

Odpowiedz

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

Oszałamiająca. Odpowiedziałem tak szybko, że StackOverflow nie pozwoli mi nawet zaakceptować tego przez kolejne 7 minut :-D – EvilDr

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

jest określenie 'szukaj' jako obiekt RegEx - nie sznurku.

Po prostu za pomocą /.../ automatycznie skrzyni jeden przezroczysty.

+1

Jaka jest trasa/g dla proszę? – EvilDr

+1

@EvilDr oznacza to dopasowanie wszystkich (jest to specyficzne dla JS). – HamZa

+1

"Bo chcesz zastąpić wszystkie mecze, nie tylko pierwsze. – barryhunter