2

我有一个 html 字符串,我想用双引号替换任何用单引号设置的 html 属性实例。

例如,我想替换

<script src='foo.js'></script>

<script src="foo.js"></script>

但是,我想这样做而不影响可能在 javascript 语句或 html 中的文本中的任何单引号。

例如

<script> var foo = '67'; </script> 

应该不受影响并且

<div id='foo'> 'hi' </div>

应该成为

<div id="foo"> 'hi' </div>

有什么简单的方法可以做到这一点?

对于给定的元素,使用 jquery 选择它然后读取它的 outerHTML 会这样做,但我想一次对整个 html 页面执行此操作。

谢谢!

4

2 回答 2

1

试试这个:

var str = "<br style   = 'width:100px'/>   test link<a href=\"http://www\"></a>";
var regex = /<\w+\s*(\w+\s*=\s*(['][^']*['])|(["][^"]*["]))*\s*[\/]?>/g;
var rstr = str.replace(regex, function($0,$1,$2){
    return $0.replace($2, $2.replace(/'/g, '"'));
});
console.log('replaced string = ' + rstr);

您可以对其进行反思以严格匹配您的情况。

于 2012-11-14T05:17:37.427 回答
1

回答我自己的问题,因为我认为最简单的解决方案是这个小提琴中显示的内容,不需要 jquery 或正则表达式:

http://jsfiddle.net/QdUR5/1/

<html id="foo"></html>​
var htmlString = 
  '<head>' +
  '<script type="text/javascript" src=\'main.js\'></scr' + 'ipt>' +
  '</head>' +
  '<body onload=\'onLoad()\'>' +
  '</body>' ;

document.getElementById('foo').innerHTML = htmlString;
console.log(document.getElementById('foo').outerHTML);

​</p>

基本上你只需要将html元素的内部html设置为不带html标签的html字符串,然后输出html元素的外部html。

我认为这比使用正则表达式要简单一些,尽管这是一个很棒的正则表达式 Mike :)

于 2012-11-14T05:21:34.110 回答