从字符串 - >中删除<! - ?xml和<!DOCTYPE

时间:2013-03-19 22:32:41

标签: javascript regex

我在Javascript中有以下字符串,需要删除<?xml ... ?><!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, '');

3 个答案:

答案 0 :(得分:6)

replace()适用于<?xml ... ?>部分。

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

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

正如您在此处所见:http://jsfiddle.net/darkajax/9fKnd/1/

答案 1 :(得分:4)

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

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>

答案 2 :(得分: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)