2013-05-13 6 views
5

I'm trying to use JQuery to achieve the following logic:あなたは正規表現オブジェクトとして「検索」を指定し<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...

答えて

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

素晴らしい。私は、StackOverflowでさらに7分間それを受け入れることさえ許されないほど早く答えました:-D – EvilDr

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

で[URL]タグを交換 - 文字列ではありません。

ちょうど/.../を使用すると自動的に透明になります。

+1

お願いします。 – EvilDr

+1

@EvilDrこれは、すべてマッチすることを意味します(これはJS固有) – HamZa

+1

'最初のマッチではなく、すべてのマッチを置き換えたいからです。 – barryhunter

関連する問題