在JavaScript / JQuery中用<a href>标签替换[url]标签

5

我正在尝试使用JQuery实现以下逻辑:

  • [url="http://www.google.com"]Google[/url]的字符串值替换为 <a href="http://www.google.com">Google</a>

请查看下面我的HTML页面。问题在于按下按钮后,只是粘贴了原始文本,没有进行正则表达式替换。

<!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>

我曾在ASP.NET中使用这个正则表达式模式成功,所以我不确定在转到JavaScript时出了什么问题...

2个回答

5

这不是一个有效的正则表达式。请使用 / 作为修饰符:

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

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

在文本末尾添加g将重复查找。这里有一个示例: http://jsfiddle.net/xe2F9/

太棒了。回答得如此之快,以至于StackOverflow甚至不允许我在另外7分钟内接受它 :-D - EvilDr

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

您需要将“search”指定为正则表达式对象而不是字符串。
只需使用 / ... / 将自动创建一个透明对象。

1
请问末尾的 /g 是什么意思? - EvilDr
1
@EvilDr 这意味着匹配所有(这是 JS 特有的)。 - HamZa
1
因为您想替换所有匹配项,而不仅仅是第一个。 - barryhunter
3
“global” - 即替换所有出现的地方,而不仅仅是第一个。 - Paolo Bergantino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接