javascript 正则表达式 替换问题
我想在一篇文章的某些关键字上添加链接, 
 可是这些关键词很相识,比如:上海市,上海等 
 当我第一次(循环)替换上海市完成后: 
 ...... <span   name=...>  <a   href=...> 上海市 </a>  </span> ... 
 然后第二次(循环)替换上海就不对了,变成了: 
 ...... <span   name=...>  <a   href=...>  <span   name=...>  <a   href...> 上海 </a>  </span> 市 </a>  </span> ...   
 我想在每次替换的时候忽略掉已经有 <span> 的词,这样只要先替换字数多的 
 然后替换字数少的就不会有问题,可是正则表达式怎么写都不对   
 str.replace(/[^ <span[^> ]+> ][/s][/S]+[^ <\/span]|上海/,    ' <span   name...>  <a...> 上海 </a>  </span>  ') 
 这个不对,怎么不对很难表达清除,可以试一试   
 就是说,正则表达式怎么写才能忽略掉已经有链接的, 
 并把没有链接的关键词替换成链接   
 不知道我有没有表达清除!
------解决方案--------------------是这个意思吗? 
 str.replace(/(上海)[^市]/gi,  ' <span name...>  <a...> $1 </a>  </span>  ')
------解决方案--------------------结果如期待(不支持已经有嵌套的 <a> 元素。。   
  <script type= "text/javascript ">  
 var strng =  "上海市,上海等, <a> 上海等 <\/a>  "; 
 var key = [ "上海市 ",  "上海 "] 
 var reg = new RegExp( "( <a> (?:.|\\n|\\r)+? <\\/a> )|( " + key.join( "| ") +  ") ",  "ig "); 
 var j = strng.replace(reg, function (a, b, c) { 
 	return b ? a :  " <a newURL>  " + a +  " <\/a>  "; 
 }); 
 alert(j); 
  </script>
------解决方案--------------------差不多这样 
 str.replace(/(上海)( <[^> ]+> )*市/gi,  ' ') 
 不过还得具体问题具体看 
------解决方案--------------------忽略span里的关键字 
 var reg = new RegExp( "( <a> (?:.|\\n|\\r)+? <\\/a> )|( " + key.join( "| ") +  ") ",  "ig "); 
 把a换成span就可以了。。 
 只不过这个不支持嵌套。。