用超链接替换[]中的文本的JavaScript

时间:2012-03-13 13:53:23

标签: javascript regex

我正在编写一个javascript来将[]中的文本替换为html链接。但是我坚持生成一个正则表达式来匹配[]中的任何字符串,然后用超链接替换它。

以下是我尝试的代码段:

<html>
<head>
</head>
<body id="body">

Hello World [1234]<br>
[322]<br>
Hello
</body>
</html>


<script type="text/javascript">
var bodyText=document.getElementById('body').innerHTML;
var pattern = "\[(.*?)\]";
var replaceText = "<a href="www.mysite.com">Pradeep</a>";
document.getElementById('body').innerHTML = bodyText.replace(pattern/gi, replaceText);
</script>

任何人都可以建议我这样做的最好方法

谢谢,

2 个答案:

答案 0 :(得分:2)

如果你有一个表示正则表达式的字符串,你必须调用new RegExp(str)来构建一个正则表达式,但你可以在这里创建一个正则表达式。此外,i标志不是必需的,因为正则表达式中没有任何内容引用字母。并且,您不使用捕获组,因此您也可以消除它们。最后,您需要转义字符串中的引号,因为解释器现在认为您的字符串在href=之后结束:

var bodyText = document.getElementById('body').innerHTML;
var pattern = /\[.*?\]/g;
var replaceText = "<a href=\"www.mysite.com\">Pradeep</a>";
document.getElementById('body').innerHTML = bodyText.replace(pattern, replaceText);

答案 1 :(得分:1)

我尝试\[[^\]]+\]作为正则表达式并获得正确的输出:

var s = 'Hello World [1234]<br>[322]<br>';
s = s.replace(/\[[^\]]+\]/ig, '<a href="http://www.mysite.com">Pradeep</a>');
// output
// Hello World <a href="http://www.mysite.com">Pradeep</a><br><a href="http://www.mysite.com">Pradeep</a><br>