4

我在 Javascript 中有以下字符串,需要删除<?xml ... ?>and<!DOCTYPE .... ]>标记。无法将其转换为 dom,因为 BR 标记错误为未关闭 - 并且无法编辑实际内容。

  <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html [<!ENTITY amp "&#38;#38;">]><div>Blah<br> Blah</div>

试图用 .replace 做到这一点,但似乎无法到达那里

    text.replace(/\<\?xml.+\?\>/g, '');

你的replace()作品<?xml ... ?>

要删除该<!DOCTYPE .... ]>部分,您可以执行以下操作:

text.replace(/\<\?xml.+\?\>|\<\!DOCTYPE.+]\>/g, '');

正如你在这里看到的:http: //jsfiddle.net/darkajax/9fKnd/1/

4

3 回答 3

8

你的replace()作品<?xml ... ?>

要删除该<!DOCTYPE .... ]>部分,您可以执行以下操作:

text.replace(/\<\?xml.+\?\>|\<\!DOCTYPE.+]\>/g, '');

正如你在这里看到的:http: //jsfiddle.net/darkajax/9fKnd/1/

于 2013-03-19T22:39:25.010 回答
5

你可以使用这个正则表达式:

text.replace(/\<(\?xml|(\!DOCTYPE[^\>\[]+(\[[^\]]+)?))+[^>]+\>/g, '');

适用于:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html [<!ENTITY amp "&#38;#38;">]><div>Blah<br> Blah</div>

<?xml version="1.0" encoding="UTF-8"?><div>Blah<br> Blah</div>

<!DOCTYPE html [<!ENTITY amp "&#38;#38;">]><div>Blah<br> Blah</div>
于 2013-03-19T22:46:57.703 回答
0

接受的答案有不必要的转义(额外的反斜杠,使丑陋的正则表达式更丑),这也有效:

const text = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html [<!ENTITY amp "&#38;#38;">]><div>Blah<br> Blah</div>'

console.log(text)

const afterReplace = text.replace(/<\?xml.+\?>|<!DOCTYPE.+]>/g, '')

console.log(afterReplace)

于 2018-12-06T17:47:25.933 回答