使用指定的分隔符拆分字符串,并替换某些部分

时间:2013-04-25 05:52:06

标签: javascript html regex

我有这样的内容Go to {#www.google.com##Google#},我想将其用作可点击链接,如下所示:

Go to <a href="www.google.com" title="Google">Google</a>

我的尝试:var splCharData = splCharData.split(/[\{#\#}]/g);

2 个答案:

答案 0 :(得分:3)

找到正则表达式实际上很容易。很容易忘记,即使在JavaScript中,您也应该防范XSS漏洞。

确保值被正确转义的一种方法是实际创建一个锚点,然后查询其outerHTML属性:

var str = 'Go to {#www.google.com##Google#}',
    m = /\{#([^#]+)##([^#]+)#\}/g;

alert(str.replace(m, function($0, $1, $2) {
  var a = document.createElement('a');
  a.href = 'http://' + $1;
  a.title = $2;
  a.textContent = $2;

  return a.outerHTML;
}));

Demo

或者,您可以使用仅字符串方法并手动转义您在属性内推送的任何内容。

var str = 'Go to {#www.google.com##Google#}',
    m = /\{#([^#]+)##([^#]+)#\}/g,
    htmlspecialchars = function(str) {
      return str
        .replace('<', '&lt;')
        .replace('&', '&amp;')
        .replace('>', '&gt;')
        .replace('"', '&quot;');
    };

alert(str.replace(m, function($0, $1, $2) {
  return '<a href="' + 
    htmlspecialchars('http://' + $1) +
    '" title="' +
    htmlspecialchars($2) + 
    '">' + 
    htmlspecialchars($2) +
    '</a>';
}));

Demo

答案 1 :(得分:1)

查找:\{#([^#]+)##([^#]+)#\}

替换为:<a href="$1" title="$2">$2</a>